import%20marimo%0A%0A__generated_with%20%3D%20%220.14.16%22%0Aapp%20%3D%20marimo.App(%0A%20%20%20%20width%3D%22medium%22%2C%0A%20%20%20%20app_title%3D%22Nested%20Subtotals%20Pattern%22%2C%0A%20%20%20%20css_file%3D%22marimo_custom.css%22%2C%0A)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20text_cell(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%23%20Nested%20Subtotals%0A%0A%20%20%20%20Create%20hierarchical%20drill-down%20analysis%20with%20multiple%20aggregation%20levels.%0A%0A%20%20%20%20%23%23%20Overview%0A%0A%20%20%20%20Nested%20subtotals%20allow%20you%20to%20create%20multiple%20levels%20of%20aggregation%20in%20a%20single%0A%20%20%20%20query.%20This%20pattern%20helps%20you%20build%20hierarchical%20reports%20showing%20both%20detailed%0A%20%20%20%20and%20summary%20information%20at%20different%20levels.%0A%0A%20%20%20%20**Malloy%20reference%3A**%20%5BNested%20Subtotals%5D(https%3A%2F%2Fdocs.malloydata.dev%2Fdocumentation%2Fpatterns%2Fnested_subtotals)%0A%0A%20%20%20%20This%20pattern%20is%20essential%20for%3A%0A%20%20%20%20-%20**Hierarchical%20reporting**%20-%20Year%20%E2%86%92%20Month%20%E2%86%92%20Day%20breakdowns%0A%20%20%20%20-%20**Drill-down%20analysis**%20-%20Region%20%E2%86%92%20State%20%E2%86%92%20City%20views%0A%20%20%20%20-%20**Multi-dimensional%20subtotals**%20-%20Category%20%2B%20Status%20breakdowns%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20text_cell()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20ibis%0A%20%20%20%20from%20ibis%20import%20_%0A%20%20%20%20from%20boring_semantic_layer%20import%20to_semantic_table%0A%20%20%20%20import%20textwrap%0A%0A%20%20%20%20BASE_URL%20%3D%20%22https%3A%2F%2Fpub-a45a6a332b4646f2a6f44775695c64df.r2.dev%22%0A%0A%20%20%20%20%23%20Define%20code%20as%20strings%20for%20accordion%0A%20%20%20%20imports_code%20%3D%20textwrap.dedent(%22%22%22%5C%0A%20%20%20%20import%20ibis%0A%20%20%20%20from%20ibis%20import%20_%0A%20%20%20%20from%20boring_semantic_layer%20import%20to_semantic_table%0A%20%20%20%20%22%22%22)%0A%0A%20%20%20%20data_code%20%3D%20textwrap.dedent(f%22%22%22%5C%0A%20%20%20%20BASE_URL%20%3D%20%22%7BBASE_URL%7D%22%0A%20%20%20%20con%20%3D%20ibis.duckdb.connect(%22%3Amemory%3A%22)%0A%0A%20%20%20%20%23%20Load%20order%20items%20data%0A%20%20%20%20order_items_tbl%20%3D%20con.read_parquet(f%22%7B%7BBASE_URL%7D%7D%2Forder_items.parquet%22)%0A%0A%20%20%20%20%23%20Add%20date%20dimensions%0A%20%20%20%20order_items_with_dates%20%3D%20order_items_tbl.mutate(%0A%20%20%20%20%20%20%20%20created_year%3Dorder_items_tbl.created_at.year()%2C%0A%20%20%20%20%20%20%20%20created_month%3Dorder_items_tbl.created_at.month()%2C%0A%20%20%20%20)%0A%20%20%20%20%22%22%22)%0A%0A%20%20%20%20semantic_code%20%3D%20textwrap.dedent(%22%22%22%5C%0A%20%20%20%20order_items%20%3D%20(%0A%20%20%20%20%20%20%20%20to_semantic_table(order_items_with_dates%2C%20name%3D%22order_items%22)%0A%20%20%20%20%20%20%20%20.with_measures(%0A%20%20%20%20%20%20%20%20%20%20%20%20order_count%3Dlambda%20t%3A%20t.count()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20total_sales%3Dlambda%20t%3A%20t.sale_price.sum()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20avg_price%3Dlambda%20t%3A%20t.sale_price.mean()%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20%22%22%22)%0A%0A%20%20%20%20%23%20Execute%20setup%0A%20%20%20%20con%20%3D%20ibis.duckdb.connect(%22%3Amemory%3A%22)%0A%20%20%20%20order_items_tbl%20%3D%20con.read_parquet(f%22%7BBASE_URL%7D%2Forder_items.parquet%22)%0A%0A%20%20%20%20order_items_with_dates%20%3D%20order_items_tbl.mutate(%0A%20%20%20%20%20%20%20%20created_year%3Dorder_items_tbl.created_at.year()%2C%0A%20%20%20%20%20%20%20%20created_month%3Dorder_items_tbl.created_at.month()%2C%0A%20%20%20%20)%0A%0A%20%20%20%20order_items%20%3D%20to_semantic_table(%0A%20%20%20%20%20%20%20%20order_items_with_dates%2C%0A%20%20%20%20%20%20%20%20name%3D%22order_items%22%2C%0A%20%20%20%20).with_measures(%0A%20%20%20%20%20%20%20%20order_count%3Dlambda%20t%3A%20t.count()%2C%0A%20%20%20%20%20%20%20%20total_sales%3Dlambda%20t%3A%20t.sale_price.sum()%2C%0A%20%20%20%20%20%20%20%20avg_price%3Dlambda%20t%3A%20t.sale_price.mean()%2C%0A%20%20%20%20)%0A%0A%20%20%20%20%23%20Display%20accordion%20with%20setup%20code%0A%20%20%20%20_title%20%3D%20mo.md(%22%23%23%20Define%20Semantic%20Model%22)%0A%20%20%20%20_desc%20%3D%20mo.md(%22We%20create%20a%20semantic%20table%20with%20sales%20measures%3A%22)%0A%20%20%20%20_accordion%20%3D%20mo.accordion(%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%220%EF%B8%8F%E2%83%A3%20Imports%22%3A%20mo.md(f%22%60%60%60python%5Cn%7Bimports_code%7D%5Cn%60%60%60%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%221%EF%B8%8F%E2%83%A3%20Load%20%26%20prepare%20data%22%3A%20mo.md(f%22%60%60%60python%5Cn%7Bdata_code%7D%5Cn%60%60%60%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%222%EF%B8%8F%E2%83%A3%20Define%20semantic%20table%22%3A%20mo.md(f%22%60%60%60python%5Cn%7Bsemantic_code%7D%5Cn%60%60%60%22)%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%0A%0A%20%20%20%20mo.vstack(%5B_title%2C%20_desc%2C%20_accordion%5D)%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell%0Adef%20text_cell(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%23%23%20Sales%20by%20Year%0A%0A%20%20%20%20Query%20sales%20aggregated%20by%20year%3A%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20q1%20%3D%20%22%22%22%0A%20%20%20%20order_items.group_by(%22created_year%22)%0A%20%20%20%20.aggregate(%22order_count%22%2C%20%22total_sales%22)%0A%20%20%20%20.order_by(%22created_year%22)%0A%20%20%20%20%22%22%22%0A%0A%20%20%20%20q1_e%20%3D%20eval(%22(%22%20%2B%20q1%20%2B%20%22)%22)%0A%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20mo.md(f%22%60%60%60python%5Cn%7Bq1%7D%5Cn%60%60%60%22)%2C%0A%20%20%20%20%20%20%20%20mo.ui.tabs(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%93%8A%20Table%22%3A%20mo.ui.table(q1_e.execute())%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%93%88%20Chart%22%3A%20q1_e.chart(backend%3D%22altair%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%92%BB%20SQL%22%3A%20mo.md(f%22%60%60%60sql%5Cn%7Bq1_e.sql()%7D%5Cn%60%60%60%22)%0A%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20text_cell(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%23%23%20Sales%20by%20Year%20and%20Month%0A%0A%20%20%20%20Drill%20down%20to%20month%20level%20within%20each%20year%3A%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20q2%20%3D%20%22%22%22%0A%20%20%20%20order_items.group_by(%22created_year%22%2C%20%22created_month%22)%0A%20%20%20%20.aggregate(%22order_count%22%2C%20%22total_sales%22)%0A%20%20%20%20.order_by(%22created_year%22%2C%20%22created_month%22)%0A%20%20%20%20.limit(15)%0A%20%20%20%20%22%22%22%0A%0A%20%20%20%20q2_e%20%3D%20eval(%22(%22%20%2B%20q2%20%2B%20%22)%22)%0A%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20mo.md(f%22%60%60%60python%5Cn%7Bq2%7D%5Cn%60%60%60%22)%2C%0A%20%20%20%20%20%20%20%20mo.ui.tabs(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%93%8A%20Table%22%3A%20mo.ui.table(q2_e.execute())%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%93%88%20Chart%22%3A%20q2_e.chart(backend%3D%22altair%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%92%BB%20SQL%22%3A%20mo.md(f%22%60%60%60sql%5Cn%7Bq2_e.sql()%7D%5Cn%60%60%60%22)%0A%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20text_cell(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%23%23%20Sales%20by%20Year%20and%20Status%0A%0A%20%20%20%20Analyze%20sales%20across%20different%20order%20statuses%20within%20each%20year%3A%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20q3%20%3D%20%22%22%22%0A%20%20%20%20order_items.group_by(%22created_year%22%2C%20%22status%22)%0A%20%20%20%20.aggregate(%22order_count%22%2C%20%22total_sales%22%2C%20%22avg_price%22)%0A%20%20%20%20.order_by(%22created_year%22%2C%20%22total_sales%22)%0A%20%20%20%20.limit(15)%0A%20%20%20%20%22%22%22%0A%0A%20%20%20%20q3_e%20%3D%20eval(%22(%22%20%2B%20q3%20%2B%20%22)%22)%0A%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20mo.md(f%22%60%60%60python%5Cn%7Bq3%7D%5Cn%60%60%60%22)%2C%0A%20%20%20%20%20%20%20%20mo.ui.tabs(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%93%8A%20Table%22%3A%20mo.ui.table(q3_e.execute())%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%93%88%20Chart%22%3A%20q3_e.chart(backend%3D%22altair%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%F0%9F%92%BB%20SQL%22%3A%20mo.md(f%22%60%60%60sql%5Cn%7Bq3_e.sql()%7D%5Cn%60%60%60%22)%0A%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
325813589646c7ab71016cf39a2e9a719a33bfcc00cc850c04cde767c1ea8e43