CharlotteWeather
Overview
Canvas size: 1920 × 1120 px
Dashboard Layout
Click any section below to jump straight to its details.
Filters
Report-level filters: None — no hidden filters applied to all pages.
Page-level filters: None — no hidden filters applied to this page.
Slicers
| Label | Default | Multi-Select | Sort Order | Type | Base Field | Data Source | Comments |
|---|---|---|---|---|---|---|---|
| Date Range | All | - | - | Date Range Slicer | Date | Date | Label source: header Selection is synced with the same slicer on Temperature, Precipitation, and Patterns — changing it here changes it there too. |
| Season | All | - | - | Button Slicer | Season | Date | Grid 2×2 Label source: title Selection is synced with the same slicer on Temperature, Precipitation, and Patterns — changing it here changes it there too. |
| Decade | All | - | - | Button Slicer | Decade | Date | Grid 3×3 Label source: title Selection is synced with the same slicer on Temperature, Precipitation, and Patterns — changing it here changes it there too. |
| Climatological Period | All | - | - | Dropdown Slicer | Climatological Period | Date | Label source: header Selection is synced with the same slicer on Temperature, Precipitation, and Patterns — changing it here changes it there too. |
| Precipitation Type | All | - | - | Dropdown Slicer | Precipitation Type | Observation | Label source: header Selection is synced with the same slicer on Temperature, Precipitation, and Patterns — changing it here changes it there too. |
Visuals
Charlotte Has Warmed 2.9°F Since the Mid-Century Baseline
LayoutVisual Type: Text Box
Overview
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Overview page.
Temperature
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Temperature page.
Precipitation
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Precipitation page.
Patterns
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Patterns page.
Drought
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Drought page.
Daily observations from NOAA station GHCND:USW00013881 (Charlotte Douglas Airport) · 1940–2026 · 31,545 days
LayoutVisual Type: Text Box
FILTERS
LayoutVisual Type: Text Box
Card — AVG HIGH
LayoutVisual Type: Card
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| AVG HIGH | Average High Temperature | Value | Observation |
Card — AVG LOW
LayoutVisual Type: Card
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| AVG LOW | Average Low Temperature | Value | Observation |
Card — TOTAL PRECIPITATION
LayoutCard — SNOW DAYS
LayoutCard — RECORD HIGH
LayoutCard — RECORD LOW
LayoutYearly Temperature Anomaly vs. the 1940–1980 Baseline
LayoutVisual Type: Line Chart
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Year | - | X-axis | Date |
| Anomaly (°F) | Temperature Anomaly | Y-axis | Observation |
Visual Filters
Average Temperature by Month
LayoutPrecipitation by Month — Rain and Snow
LayoutVisual Type: Column Chart
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Month | Month Short | X-axis | Date |
| Precipitation | Total Precipitation | Y-axis | Observation |
| Snowfall | Total Snowfall | Y-axis | Observation |
Temperature
Canvas size: 1920 × 1120 px
Dashboard Layout
Click any section below to jump straight to its details.
Filters
Page-level filters: None — no hidden filters applied to this page.
Slicers
| Label | Default | Multi-Select | Sort Order | Type | Base Field | Data Source | Comments |
|---|---|---|---|---|---|---|---|
| Date Range | All | - | - | Date Range Slicer | Date | Date | Label source: header Selection is synced with the same slicer on Overview, Precipitation, and Patterns — changing it here changes it there too. |
| Season | All | - | - | Button Slicer | Season | Date | Grid 2×2 Label source: title Selection is synced with the same slicer on Overview, Precipitation, and Patterns — changing it here changes it there too. |
| Decade | All | - | - | Button Slicer | Decade | Date | Grid 3×3 Label source: title Selection is synced with the same slicer on Overview, Precipitation, and Patterns — changing it here changes it there too. |
| Climatological Period | All | - | - | Dropdown Slicer | Climatological Period | Date | Label source: header Selection is synced with the same slicer on Overview, Precipitation, and Patterns — changing it here changes it there too. |
| Precipitation Type | All | - | - | Dropdown Slicer | Precipitation Type | Observation | Label source: header Selection is synced with the same slicer on Overview, Precipitation, and Patterns — changing it here changes it there too. |
Visuals
Temperature: Range, Rhythm, and Records
LayoutVisual Type: Text Box
Overview
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Overview page.
Temperature
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Temperature page.
Precipitation
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Precipitation page.
Patterns
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Patterns page.
Drought
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Drought page.
Daily highs and lows across 86 years — seasonal structure and the extremes that define the record
LayoutVisual Type: Text Box
FILTERS
LayoutVisual Type: Text Box
Yearly Average High, Mean, and Low
LayoutDaily High vs. Low, Coloured by Season
LayoutDays per Temperature Band
LayoutPrecipitation
Canvas size: 1920 × 1564 px
Dashboard Layout
Click any section below to jump straight to its details.
Filters
Page-level filters: None — no hidden filters applied to this page.
Slicers
| Label | Default | Multi-Select | Sort Order | Type | Base Field | Data Source | Comments |
|---|---|---|---|---|---|---|---|
| Date Range | All | - | - | Date Range Slicer | Date | Date | Label source: header Selection is synced with the same slicer on Overview, Temperature, and Patterns — changing it here changes it there too. |
| Season | All | - | - | Button Slicer | Season | Date | Grid 2×2 Label source: title Selection is synced with the same slicer on Overview, Temperature, and Patterns — changing it here changes it there too. |
| Decade | All | - | - | Button Slicer | Decade | Date | Grid 3×3 Label source: title Selection is synced with the same slicer on Overview, Temperature, and Patterns — changing it here changes it there too. |
| Climatological Period | All | - | - | Dropdown Slicer | Climatological Period | Date | Label source: header Selection is synced with the same slicer on Overview, Temperature, and Patterns — changing it here changes it there too. |
| Precipitation Type | All | - | - | Dropdown Slicer | Precipitation Type | Observation | Label source: header Selection is synced with the same slicer on Overview, Temperature, and Patterns — changing it here changes it there too. |
Visuals
Precipitation: Volume, Rhythm, and What Drives the Heavy Days
LayoutVisual Type: Text Box
Overview
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Overview page.
Temperature
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Temperature page.
Precipitation
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Precipitation page.
Patterns
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Patterns page.
Drought
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Drought page.
Rolling totals, seasonal distribution, and a machine-learning read on which conditions produce heavy rainfall
LayoutVisual Type: Text Box
FILTERS
LayoutVisual Type: Text Box
Rolling 12-Month Precipitation, with Forecast
LayoutVisual Type: Line Chart
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Date | - | X-axis | Date |
| Rolling 12-Month | Rolling 12 Month Precipitation | Y-axis | Observation |
Monthly Precipitation by Decade
LayoutVisual Type: Column Chart
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Month | Month Short | X-axis | Date |
| Decade | - | Legend | Date |
| Precipitation | Total Precipitation | Y-axis | Observation |
Average Precipitation by Month
LayoutVisual Type: Treemap
Explicit colors: .
Conditional formatting: Data color is data-driven: a gradient from (low to high) based on Average Precipitation Per Day.
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Month | - | Category | Date |
| Avg per Day | Average Precipitation Per Day | Values | Observation |
Every Year as a Bubble
LayoutVisual Type: Scatter Chart
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Year | - | Values | Date |
| Snow Days | - | Size | Observation |
| Mean Temp | Average Mean Temperature | X Axis | Observation |
| Precipitation | Total Precipitation | Y Axis | Observation |
What Makes a Heavy-Precipitation Day More Likely?
LayoutVisual Type: Key Influencers
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Season | - | ExplainBy | Date |
| Month | - | ExplainBy | Date |
| Temperature Band | - | ExplainBy | Observation |
| Decade | - | ExplainBy | Date |
| Day Class | Precipitation Day Class | Target | Observation |
Visual Filters
| Label | Default | Multi-Select | Sort Order | Type | Base Field | Data Source | Comments |
|---|---|---|---|---|---|---|---|
| Precipitation Day Class | - | - | - | Categorical | Precipitation Day Class | Observation | Excludes: No Reading |
Patterns
Canvas size: 1920 × 1200 px
Dashboard Layout
Click any section below to jump straight to its details.
Filters
Page-level filters: None — no hidden filters applied to this page.
Slicers
| Label | Default | Multi-Select | Sort Order | Type | Base Field | Data Source | Comments |
|---|---|---|---|---|---|---|---|
| Date Range | All | - | - | Date Range Slicer | Date | Date | Label source: header Selection is synced with the same slicer on Overview, Temperature, and Precipitation — changing it here changes it there too. |
| Season | All | - | - | Button Slicer | Season | Date | Grid 2×2 Label source: title Selection is synced with the same slicer on Overview, Temperature, and Precipitation — changing it here changes it there too. |
| Decade | All | - | - | Button Slicer | Decade | Date | Grid 3×3 Label source: title Selection is synced with the same slicer on Overview, Temperature, and Precipitation — changing it here changes it there too. |
| Climatological Period | All | - | - | Dropdown Slicer | Climatological Period | Date | Label source: header Selection is synced with the same slicer on Overview, Temperature, and Precipitation — changing it here changes it there too. |
| Precipitation Type | All | - | - | Dropdown Slicer | Precipitation Type | Observation | Label source: header Selection is synced with the same slicer on Overview, Temperature, and Precipitation — changing it here changes it there too. |
Visuals
Eighty-Six Years at a Glance
LayoutVisual Type: Text Box
Overview
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Overview page.
Temperature
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Temperature page.
Precipitation
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Precipitation page.
Patterns
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Patterns page.
Drought
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Drought page.
The full record as a single heat grid, plus an interactive decomposition you steer yourself
LayoutVisual Type: Text Box
FILTERS
LayoutVisual Type: Text Box
Precipitation Heat Grid — Year × Month
LayoutVisual Type: Matrix
Explicit colors: .
Conditional formatting: Cell background is data-driven: a gradient from (low to high) based on Total Precipitation.
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Month | Month Short | Columns | Date |
| Year | - | Rows | Date |
| Precipitation | Total Precipitation | Values | Observation |
Decompose Precipitation — Steer It Yourself, or Let AI Pick
LayoutVisual Type: Decomposition Tree
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Precipitation | Total Precipitation | Analyze | Observation |
| Day Class | Precipitation Day Class | ExplainBy | Observation |
| Intensity | Precipitation Band | ExplainBy | Observation |
| Period | Climatological Period | ExplainBy | Date |
| Month | - | ExplainBy | Date |
| Decade | - | ExplainBy | Date |
| Season | - | ExplainBy | Date |
Season × Decade — Mean Temperature
LayoutDrought
Canvas size: 1920 × 1120 px
Dashboard Layout
Click any section below to jump straight to its details.
Filters
Page-level filters: None — no hidden filters applied to this page.
Visuals
Charlotte Is in Severe Drought — 66% of Normal Precipitation
LayoutVisual Type: Text Box
Overview
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Overview page.
Temperature
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Temperature page.
Precipitation
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Precipitation page.
Patterns
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Patterns page.
Drought
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Drought page.
This page deliberately ignores every filter. Drought is defined against fixed baselines, so the measures are wrapped in REMOVEFILTERS().
LayoutVisual Type: Text Box
Card — Status
LayoutVisual Type: Card
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Status | Drought Summary | Value | Observation |
Card — LAST 12 MONTHS
LayoutVisual Type: Card
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| LAST 12 MONTHS | Trailing 12 Month Precipitation | Value | Observation |
Card — 1991–2020 NORMAL
LayoutVisual Type: Card
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| 1991–2020 NORMAL | Normal Annual Precipitation | Value | Observation |
Card — DEFICIT
LayoutVisual Type: Card
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| DEFICIT | Precipitation Deficit | Value | Observation |
Card — % OF NORMAL
LayoutVisual Type: Card
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| % OF NORMAL | Percent Of Normal Precipitation | Value | Observation |
Card — CURRENT DRY STREAK
LayoutCard — RANK OF 989 (DRIEST = 1)
LayoutVisual Type: Card
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| RANK OF 989 (DRIEST = 1) | Driest 12 Month Period Rank | Value | Observation |
Rolling 12-Month Precipitation as % of Normal, Against NOAA Drought Bands
LayoutVisual Type: Line Chart
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Window End | Window End Date | X-axis | Rolling Window |
| % of Normal | Window Percent Of Normal | Y-axis | Rolling Window |
NOAA DROUGHT CLASSIFICATION
LayoutVisual Type: Text Box
Near or above normal
LayoutVisual Type: Text Box
≥ 100%
LayoutVisual Type: Text Box
D0 Abnormally dry
LayoutVisual Type: Text Box
85–100%
LayoutVisual Type: Text Box
D1 Moderate drought
LayoutVisual Type: Text Box
75–85%
LayoutVisual Type: Text Box
D2 Severe drought
LayoutVisual Type: Text Box
65–75%
LayoutVisual Type: Text Box
D3 Extreme drought
LayoutVisual Type: Text Box
50–65%
LayoutVisual Type: Text Box
D4 Exceptional drought
LayoutVisual Type: Text Box
< 50%
LayoutVisual Type: Text Box
Current window ranks 22nd driest of 989 complete 12-month windows since 1940 — drier than 98% of the record.
LayoutVisual Type: Text Box
Last 12 Months vs. the 1991–2020 Normal, by Month
LayoutVisual Type: Clustered Column Chart
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Month | Month Short | X-axis | Date |
| Last 12 Months | Recent Month Precipitation | Y-axis | Observation |
| Normal | Normal Monthly Precipitation | Y-axis | Observation |
The Ten Driest 12-Month Periods Since 1940
LayoutVisual Type: Table
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Rank | Window Rank | Columns | Rolling Window |
| From | Window Start Date | Columns | Rolling Window |
| To | Window End Date | Columns | Rolling Window |
| Total | Window Total Precipitation | Columns | Rolling Window |
| % of Normal | Window Percent Of Normal | Columns | Rolling Window |
Visual Filters
| Label | Default | Multi-Select | Sort Order | Type | Base Field | Data Source | Comments |
|---|---|---|---|---|---|---|---|
| Window Rank | - | - | - | Advanced | Window Rank | Rolling Window | - |
Supporting Pages
These hidden or utility pages support drillthrough and tooltip interactions rather than ordinary page navigation.
Daily Records Drillthrough / Hidden
Opened by right-clicking Date[Year] on another page.
Canvas size: 1920 × 1120 px
Dashboard Layout
Click any section below to jump straight to its details.
Filters
Page-Level Filters
These filters are applied invisibly to all visuals on this page.
| Label | Default | Multi-Select | Sort Order | Type | Base Field | Data Source | Comments |
|---|---|---|---|---|---|---|---|
| Year | - | - | - | Categorical | Year | Date | - |
Visuals
Daily Records
LayoutVisual Type: Text Box
Overview
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Overview page.
Temperature
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Temperature page.
Precipitation
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Precipitation page.
Patterns
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Patterns page.
Drought
LayoutVisual Type: Button
Explicit colors: .
Action: Navigates to the Drought page.
Drill-through target — right-click a year, season, or month on any page and choose Drill through to land here filtered
LayoutVisual Type: Text Box
Card — Days in Selection
LayoutVisual Type: Card
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Days in Selection | Observation Days | Value | Observation |
| Avg High | Average High Temperature | Value | Observation |
| Avg Low | Average Low Temperature | Value | Observation |
| Total Precip | Total Precipitation | Value | Observation |
| Wet Days | - | Value | Observation |
| Longest Dry Streak | - | Value | Observation |
Daily Observations
LayoutVisual Type: Table
Explicit colors: .
| Field | Source Field | Field Well | Table |
|---|---|---|---|
| Date | - | Columns | Observation |
| Season | - | Columns | Date |
| Weekday | Day Name | Columns | Date |
| High | High Temperature | Columns | Max(Observation |
| Low | Low Temperature | Columns | Min(Observation |
| Mean | Mean Temperature | Columns | Avg(Observation |
| Precipitation | - | Columns | Sum(Observation |
| Snowfall | - | Columns | Sum(Observation |
| Day Class | Precipitation Day Class | Columns | Observation |
Technical Details
The following sections contain technical information about data sources and the semantic model.
Data Model
This report contains an embedded Power BI semantic model. Tables are grouped by how they are stored in the model; calculated tables and measures list what they derive from.
Imported Tables
Tables loaded into the semantic model.
Date
Imported Columns: 18 (11 visible, 7 hidden)Observation
Imported Columns: 13 (4 visible, 9 hidden) · Measures: 35Measure index (35)
Measures
Anomaly
DAX · CALCULATE( AVERAGE('Observation'[Mean Temperature]), REMOVEFILTERS(), …
CALCULATE(
AVERAGE('Observation'[Mean Temperature]),
REMOVEFILTERS(),
'Date'[Is Anomaly Baseline] = TRUE
)
DAX · VAR _Baseline = [Baseline Mean Temperature 1940 To 1980] VAR _Current …
VAR _Baseline = [Baseline Mean Temperature 1940 To 1980]
VAR _Current = AVERAGE('Observation'[Mean Temperature])
RETURN
IF(NOT ISBLANK(_Current), _Current - _Baseline)
Coverage
Counts Precipitation.
COUNT('Observation'[Precipitation])
Depends on: Observation[Precipitation]
Used in calculations: Heavy Precipitation Day Rate
COUNTROWS('Observation')
Used by: Daily Records: Card — Days in Selection, Temperature: Days per Temperature Band
DAX · VAR _Min = CALCULATE(MIN('Observation'[Date]), REMOVEFILTERS()) VAR _M…
VAR _Min = CALCULATE(MIN('Observation'[Date]), REMOVEFILTERS())
VAR _Max = CALCULATE(MAX('Observation'[Date]), REMOVEFILTERS())
RETURN
FORMAT(_Min, "mmmm d, yyyy") & " to " & FORMAT(_Max, "mmmm d, yyyy")
Drought/Anchors
CALCULATE(MAX('Observation'[Date]), REMOVEFILTERS())
Depends on: Observation[Date]
Used in calculations: Current Dry Streak, Drought Summary, Recent Month Precipitation, Trailing 12 Month Precipitation
Drought/Banded Trend
DAX · VAR _Rolling = [Rolling 12 Month Precipitation] VAR _Normal = [Normal …
VAR _Rolling = [Rolling 12 Month Precipitation]
VAR _Normal = [Normal Annual Precipitation]
VAR _MonthsCovered =
CALCULATE(
DISTINCTCOUNT('Date'[Year Month]),
DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -12, MONTH)
)
RETURN
IF(_MonthsCovered = 12, DIVIDE(_Rolling, _Normal))
Drought/Current Window
DAX · VAR _Pct = [Percent Of Normal Precipitation] * 100 RETURN SWITCH( TRUE…
VAR _Pct = [Percent Of Normal Precipitation] * 100
RETURN
SWITCH(
TRUE(),
ISBLANK(_Pct), "No Data",
_Pct < 50, "Exceptional Drought (D4)",
_Pct < 65, "Extreme Drought (D3)",
_Pct < 75, "Severe Drought (D2)",
_Pct < 85, "Moderate Drought (D1)",
_Pct < 100, "Abnormally Dry (D0)",
"Near or Above Normal"
)
DAX · VAR _Actual = [Trailing 12 Month Precipitation] VAR _Normal = [Normal …
VAR _Actual = [Trailing 12 Month Precipitation]
VAR _Normal = [Normal Annual Precipitation]
VAR _Deficit = [Precipitation Deficit]
VAR _PctBelow = DIVIDE(_Deficit, _Normal) * 100
VAR _AnchorDate = [Last Observation Date]
RETURN
"The 12 months ending " & FORMAT(_AnchorDate, "mmmm d, yyyy")
& " received " & FORMAT(_Actual, "0.00") & " inches against a 1991-2020 normal of "
& FORMAT(_Normal, "0.00") & " inches - a deficit of " & FORMAT(_Deficit, "0.00")
& " inches, or " & FORMAT(_PctBelow, "0") & "% below normal. Current classification: "
& [Drought Classification] & "."
Calculates Trailing 12 Month Precipitation divided by Normal Annual Precipitation.
DIVIDE([Trailing 12 Month Precipitation], [Normal Annual Precipitation])
Depends on: Normal Annual Precipitation, Trailing 12 Month Precipitation
Used by: Drought: Card — % OF NORMAL
Used in calculations: Drought Classification, Drought Classification Color
DAX · VAR _Normal = [Normal Annual Precipitation] VAR _Actual = [Trailing 12…
VAR _Normal = [Normal Annual Precipitation]
VAR _Actual = [Trailing 12 Month Precipitation]
RETURN
_Normal - _Actual
DAX · VAR _Anchor = [Last Observation Date] VAR _WindowStart = EOMONTH(_Anch…
VAR _Anchor = [Last Observation Date]
VAR _WindowStart = EOMONTH(_Anchor, -12) + 1
VAR _Months = VALUES('Date'[Month Number])
RETURN
CALCULATE(
SUM('Observation'[Precipitation]),
REMOVEFILTERS(),
'Date'[Date] >= _WindowStart,
'Date'[Date] <= _Anchor,
TREATAS(_Months, 'Date'[Month Number])
)
DAX · VAR _AnchorDate = [Last Observation Date] VAR _WindowStart = EOMONTH(_…
VAR _AnchorDate = [Last Observation Date]
VAR _WindowStart = EOMONTH(_AnchorDate, -12) + 1
RETURN
CALCULATE(
SUM('Observation'[Precipitation]),
REMOVEFILTERS(),
'Date'[Date] >= _WindowStart,
'Date'[Date] <= _AnchorDate
)
Drought/Dry Streak
DAX · VAR _AnchorDate = [Last Observation Date] VAR _AllDays = CALCULATETABL…
VAR _AnchorDate = [Last Observation Date]
VAR _AllDays =
CALCULATETABLE(
SUMMARIZE('Observation', 'Observation'[Date], 'Observation'[Precipitation]),
REMOVEFILTERS(),
'Date'[Date] <= _AnchorDate
)
VAR _WithReadings = FILTER(_AllDays, NOT ISBLANK('Observation'[Precipitation]))
VAR _LastWetDate =
MAXX(FILTER(_WithReadings, 'Observation'[Precipitation] >= 0.01), 'Observation'[Date])
RETURN
COUNTROWS(FILTER(_WithReadings, 'Observation'[Date] > _LastWetDate))
DAX · VAR _DryDays = FILTER( CALCULATETABLE( SUMMARIZE('Observation', 'Obser…
VAR _DryDays =
FILTER(
CALCULATETABLE(
SUMMARIZE('Observation', 'Observation'[Date], 'Observation'[Precipitation])
),
NOT ISBLANK('Observation'[Precipitation]) && 'Observation'[Precipitation] < 0.01
)
VAR _Ranked =
ADDCOLUMNS(
_DryDays,
"@Grp", INT('Observation'[Date]) - RANKX(_DryDays, INT('Observation'[Date]), , ASC, DENSE)
)
VAR _Streaks =
GROUPBY(_Ranked, [@Grp], "@Len", COUNTX(CURRENTGROUP(), 1))
RETURN
MAXX(_Streaks, [@Len])
Drought/Historical Context
CALCULATE(COUNTROWS('Rolling Window'), REMOVEFILTERS())
Used in calculations: Drought Rank Statement
DAX · VAR _Current = [Trailing 12 Month Precipitation] VAR _Complete = CALCU…
VAR _Current = [Trailing 12 Month Precipitation]
VAR _Complete = CALCULATETABLE('Rolling Window', REMOVEFILTERS())
RETURN
IF(
NOT ISBLANK(_Current),
COUNTROWS(FILTER(_Complete, 'Rolling Window'[Window Precipitation] < _Current)) + 1
)
DAX · VAR _Rank = [Driest 12 Month Period Rank] VAR _Total = [Complete Windo…
VAR _Rank = [Driest 12 Month Period Rank]
VAR _Total = [Complete Window Count]
VAR _Pctile = DIVIDE(_Rank, _Total)
RETURN
IF(
NOT ISBLANK(_Rank),
"Ranks " & FORMAT(_Rank, "#,##0") & " driest of " & FORMAT(_Total, "#,##0")
& " complete twelve-month windows since 1940 — drier than " & FORMAT(1 - _Pctile, "0%") & " of the record."
)
Drought/Normals
Calculates a row-by-row average across a table or filtered set.
DAX · VAR _BaselineByMonthYear = CALCULATETABLE( SUMMARIZE('Date', 'Date'[Ye…
VAR _BaselineByMonthYear =
CALCULATETABLE(
SUMMARIZE('Date', 'Date'[Year], 'Date'[Month Number]),
REMOVEFILTERS(),
'Date'[Is Normals Baseline] = TRUE
)
VAR _MonthlyTotals =
ADDCOLUMNS(_BaselineByMonthYear, "@Total", CALCULATE(SUM('Observation'[Precipitation])))
VAR _ByMonth =
GROUPBY(_MonthlyTotals, 'Date'[Month Number], "@MonthNormal", AVERAGEX(CURRENTGROUP(), [@Total]))
RETURN
SUMX(_ByMonth, [@MonthNormal])
Calculates a row-by-row average across a table or filtered set.
DAX · VAR _MonthNumbers = VALUES('Date'[Month Number]) VAR _BaselineByMonthY…
VAR _MonthNumbers = VALUES('Date'[Month Number])
VAR _BaselineByMonthYear =
CALCULATETABLE(
SUMMARIZE('Date', 'Date'[Year], 'Date'[Month Number]),
REMOVEFILTERS(),
'Date'[Is Normals Baseline] = TRUE,
TREATAS(_MonthNumbers, 'Date'[Month Number])
)
VAR _MonthlyTotals =
ADDCOLUMNS(_BaselineByMonthYear, "@Total", CALCULATE(SUM('Observation'[Precipitation])))
VAR _ByMonth =
GROUPBY(_MonthlyTotals, 'Date'[Month Number], "@MonthNormal", AVERAGEX(CURRENTGROUP(), [@Total]))
RETURN
SUMX(_ByMonth, [@MonthNormal])
Precipitation
Averages Precipitation.
AVERAGE('Observation'[Precipitation])
Depends on: Observation[Precipitation]
Used by: Precipitation: Average Precipitation by Month
Calculates Heavy Precipitation Days divided by Days With Precipitation Reading.
DIVIDE([Heavy Precipitation Days], [Days With Precipitation Reading])
Depends on: Days With Precipitation Reading, Heavy Precipitation Days
Not used on any page
Calculates Precipitation Day Class, but only for rows where Precipitation Day Class = Heavy.
CALCULATE(COUNTROWS('Observation'), 'Observation'[Precipitation Day Class] = "Heavy")
Depends on: Observation[Precipitation Day Class]
Used in calculations: Heavy Precipitation Day Rate
CALCULATE(COUNTROWS('Observation'), 'Observation'[Snowfall] > 0)
Depends on: Observation[Snowfall]
Used by: Overview: Card — SNOW DAYS, Precipitation: Every Year as a Bubble
Totals Precipitation.
SUM('Observation'[Precipitation])
Depends on: Observation[Precipitation]
Used by: Daily Records: Card — Days in Selection, Overview: Card — TOTAL PRECIPITATION
Totals Snowfall.
SUM('Observation'[Snowfall])
Depends on: Observation[Snowfall]
Not used on any page
CALCULATE(COUNTROWS('Observation'), 'Observation'[Precipitation] >= 0.01)
Depends on: Observation[Precipitation]
Used by: Daily Records: Card — Days in Selection
Precipitation/Rolling
DAX · VAR _LastDate = MAX('Date'[Date]) RETURN CALCULATE( SUM('Observation'[…
VAR _LastDate = MAX('Date'[Date])
RETURN
CALCULATE(
SUM('Observation'[Precipitation]),
DATESINPERIOD('Date'[Date], _LastDate, -12, MONTH)
)
DAX · VAR _Rolling = [Rolling 12 Month Precipitation] VAR _Normal = [Normal …
VAR _Rolling = [Rolling 12 Month Precipitation]
VAR _Normal = [Normal Annual Precipitation]
RETURN
IF(NOT ISBLANK(_Rolling), _Rolling - _Normal)
Temperature
Averages High Temperature.
AVERAGE('Observation'[High Temperature])
Depends on: Observation[High Temperature]
Used by: Daily Records: Card — Days in Selection, Overview: Average Temperature by Month, Overview: Card — AVG HIGH, Temperature: Yearly Average High, Mean, and Low
Averages Low Temperature.
AVERAGE('Observation'[Low Temperature])
Depends on: Observation[Low Temperature]
Used by: Daily Records: Card — Days in Selection, Overview: Average Temperature by Month, Overview: Card — AVG LOW, Temperature: Yearly Average High, Mean, and Low
Averages Mean Temperature.
AVERAGE('Observation'[Mean Temperature])
Depends on: Observation[Mean Temperature]
Used by: Overview: Average Temperature by Month, Patterns: Season × Decade — Mean Temperature, Precipitation: Every Year as a Bubble, Temperature: Yearly Average High, Mean, and Low
Finds the maximum of High Temperature.
MAX('Observation'[High Temperature])
Depends on: Observation[High Temperature]
Used by: Overview: Card — RECORD HIGH, Temperature: Hottest Days on Record
Finds the minimum of Low Temperature.
MIN('Observation'[Low Temperature])
Depends on: Observation[Low Temperature]
Used by: Overview: Card — RECORD LOW, Temperature: Hottest Days on Record
Supporting measures (1)
Supporting measures work behind the scenes to drive how visuals look and behave — dynamic titles, conditional colors, SVG images, layout and ranking helpers — rather than business numbers users read directly.
Drought/Current Window
DAX · VAR _Pct = [Percent Of Normal Precipitation] * 100 RETURN SWITCH( TRUE…
VAR _Pct = [Percent Of Normal Precipitation] * 100
RETURN
SWITCH(
TRUE(),
ISBLANK(_Pct), "#94a3b8",
_Pct < 50, "#f43f5e",
_Pct < 65, "#ef4444",
_Pct < 75, "#f59e0b",
_Pct < 85, "#eab308",
_Pct < 100, "#22d3ee",
"#22d3ee"
)
Calculated and Helper Tables
Tables generated by DAX inside the semantic model, including parameter and selection tables.
Rolling Window
Calculated Columns: 5 · Measures: 2DAX · VAR _Ends = ADDCOLUMNS( SUMMARIZE('Date', 'Date'[Year Month]), "@End",…
VAR _Ends =
ADDCOLUMNS(
SUMMARIZE('Date', 'Date'[Year Month]),
"@End", CALCULATE(MAX('Date'[Date]), ALLEXCEPT('Date', 'Date'[Year Month]))
)
VAR _Spans =
ADDCOLUMNS(_Ends, "@Start", EOMONTH([@End], -12) + 1)
VAR _Measured =
ADDCOLUMNS(
_Spans,
"@CalendarDays", COUNTROWS(FILTER(ALL('Date'), 'Date'[Date] >= [@Start] && 'Date'[Date] <= [@End])),
"@Readings", COUNTX(FILTER(ALL('Observation'), 'Observation'[Date] >= [@Start] && 'Observation'[Date] <= [@End]), 'Observation'[Precipitation]),
"@Total", SUMX(FILTER(ALL('Observation'), 'Observation'[Date] >= [@Start] && 'Observation'[Date] <= [@End]), 'Observation'[Precipitation])
)
VAR _Complete = FILTER(_Measured, [@Readings] = [@CalendarDays] && [@CalendarDays] >= 365)
RETURN
SELECTCOLUMNS(
_Complete,
"Window End Month", 'Date'[Year Month],
"Window End Date", [@End],
"Window Start Date", [@Start],
"Window Precipitation", [@Total],
"Window Rank", RANKX(_Complete, [@Total], , ASC, DENSE)
)
| Column | Summarization |
|---|---|
| Window End Date Used by: Drought: Rolling 12-Month Precipitation as % of Normal, Against NOAA Drought Bands, Drought: The Ten Driest 12-Month Periods Since 1940 | - |
| Window End Month Not used on any page | - |
| Window Precipitation Used in calculations: Driest 12 Month Period Rank, Window Percent Of Normal, Window Total Precipitation | sum |
| Window Rank Used by: Drought: The Ten Driest 12-Month Periods Since 1940 | sum |
| Window Start Date Used by: Drought: The Ten Driest 12-Month Periods Since 1940 | - |
Measure index (2)
Measures
Rolling Window
DIVIDE(SUM('Rolling Window'[Window Precipitation]), [Normal Annual Precipitation])
Depends on: Normal Annual Precipitation, Rolling Window[Window Precipitation]
Used by: Drought: Rolling 12-Month Precipitation as % of Normal, Against NOAA Drought Bands, Drought: The Ten Driest 12-Month Periods Since 1940
Totals Window Precipitation.
SUM('Rolling Window'[Window Precipitation])
Depends on: Rolling Window[Window Precipitation]
Used by: Drought: The Ten Driest 12-Month Periods Since 1940
Relationships
Relationships connect tables so a selection in one place filters data everywhere it should. Each row links a column to its matching column in another table — for example, picking a date on a slicer filters every connected table to that date. This is what lets one filter drive many visuals at once.
| From | To | Status | Notes | |
|---|---|---|---|---|
| Observation[Date] | → | Date[Date] | Active | - |