Skip to main content

Sample data

Datasets you can paste straight into Power BI to try the Parliament Chart in both data shapes, without touching your own model.

Each one comes with a DAX version you can paste into Modeling → New table in Power BI Desktop, which is the fastest way to get a working chart on screen.

Figures are illustrative

The chamber compositions below are drawn from published election results and are here to demonstrate the visual, not to serve as a reference. Check the current composition before using any of them in a real report.

1. A small chamber — party totals

The simplest complete setup: 100 seats, four parties, with an order and colours.

PartySeatsSort OrderColour
Green List181#5FB158
Progressive Alliance412#D8382E
Independents83#9C9C9C
Civic Union334#2B5FA8
Chamber =
DATATABLE (
"Party", STRING,
"Seats", INTEGER,
"Sort Order", INTEGER,
"Colour", STRING,
{
{ "Green List", 18, 1, "#5FB158" },
{ "Progressive Alliance", 41, 2, "#D8382E" },
{ "Independents", 8, 3, "#9C9C9C" },
{ "Civic Union", 33, 4, "#2B5FA8" }
}
)

Bind: Party → Party · Seats → Seat Count · Sort Order → Sort Order · Colour → Custom Color. Settings: Arc 180, Legend Bottom center with Seat counts on.

The 100-seat sample chamber with Green List 18, Progressive Alliance 41, Independents 8 and Civic Union 33

2. A large chamber — UK House of Commons

650 seats across 15 groups. A good stress test for legend layout, thin wedges and left-to-right ordering.

PartySeatsSort OrderColour
Sinn Féin71#326760
SDLP22#2AA82C
Green43#6AB023
Plaid Cymru44#005B54
SNP95#FDF38E
Labour4116#E4003B
Liberal Democrats727#FAA61A
Alliance18#F6CB2F
Independent69#909090
Speaker110#BBBBBB
UUP111#48A5EE
DUP512#D46A4C
TUV113#0C3A6A
Conservative12114#0087DC
Reform UK515#12B6CF
Commons =
DATATABLE (
"Party", STRING,
"Seats", INTEGER,
"Sort Order", INTEGER,
"Colour", STRING,
{
{ "Sinn Féin", 7, 1, "#326760" },
{ "SDLP", 2, 2, "#2AA82C" },
{ "Green", 4, 3, "#6AB023" },
{ "Plaid Cymru", 4, 4, "#005B54" },
{ "SNP", 9, 5, "#FDF38E" },
{ "Labour", 411, 6, "#E4003B" },
{ "Liberal Democrats", 72, 7, "#FAA61A" },
{ "Alliance", 1, 8, "#F6CB2F" },
{ "Independent", 6, 9, "#909090" },
{ "Speaker", 1, 10, "#BBBBBB" },
{ "UUP", 1, 11, "#48A5EE" },
{ "DUP", 5, 12, "#D46A4C" },
{ "TUV", 1, 13, "#0C3A6A" },
{ "Conservative", 121, 14, "#0087DC" },
{ "Reform UK", 5, 15, "#12B6CF" }
}
)

Settings: Arc 180, Legend Right (15 entries don't fit in a single row), Seat counts on, Show Total Seats on.

The 650-seat House of Commons sample with all 15 groups and their seat counts

tip

A majority is 326 of 650. The visual doesn't draw a majority line — put the threshold in a card visual beside the chart, or see No majority line.

3. A wide hemicycle — European Parliament

720 seats across nine political groups. Sort Order matters more here than anywhere: the groups run left to right along a recognised political axis.

GroupSeatsSort OrderColour
The Left461#B71C1C
S&D1362#F0001C
Greens/EFA533#57B45F
Renew774#FFDD00
EPP1885#3399FF
ECR786#0054A5
PfE847#2B3A67
ESN258#063E7B
Non-attached339#B0B0B0
EuroParliament =
DATATABLE (
"Group", STRING,
"Seats", INTEGER,
"Sort Order", INTEGER,
"Colour", STRING,
{
{ "The Left", 46, 1, "#B71C1C" },
{ "S&D", 136, 2, "#F0001C" },
{ "Greens/EFA", 53, 3, "#57B45F" },
{ "Renew", 77, 4, "#FFDD00" },
{ "EPP", 188, 5, "#3399FF" },
{ "ECR", 78, 6, "#0054A5" },
{ "PfE", 84, 7, "#2B3A67" },
{ "ESN", 25, 8, "#063E7B" },
{ "Non-attached", 33, 9, "#B0B0B0" }
}
)

Settings: Arc 200 for a wider, flatter hemicycle, Legend Right center to keep all nine names visible, Seat counts on.

The 720-seat European Parliament sample at 200 degrees, with nine groups in the documented order

4. One row per seat — a committee

Twelve seats, each carrying its own member. Use this to see per-seat tooltips working.

Seat IDMemberPartyConstituencyFirst elected
S-001A. WhitcombeProgressive AllianceNorthgate2019
S-002R. DelgadoProgressive AllianceAshvale East2024
S-003P. FerreiraProgressive AllianceCardew2015
S-004N. HaddadProgressive AllianceNorthgate West2024
S-005M. OseiCivic UnionKingsmere2015
S-006J. BrennanCivic UnionHalloway2019
S-007T. NakamuraCivic UnionStonebridge2024
S-008L. VasquezCivic UnionEastmoor2011
S-009K. LindqvistGreen ListFenbrook2024
S-010D. AchterbergGreen ListWyecombe2019
S-011S. IyerIndependentsMarbury2024
S-012C. DuforestIndependentsPellhurst2015
Members =
DATATABLE (
"Seat ID", STRING,
"Member", STRING,
"Party", STRING,
"Constituency", STRING,
"First elected", STRING,
{
{ "S-001", "A. Whitcombe", "Progressive Alliance", "Northgate", "2019" },
{ "S-002", "R. Delgado", "Progressive Alliance", "Ashvale East", "2024" },
{ "S-003", "P. Ferreira", "Progressive Alliance", "Cardew", "2015" },
{ "S-004", "N. Haddad", "Progressive Alliance", "Northgate West", "2024" },
{ "S-005", "M. Osei", "Civic Union", "Kingsmere", "2015" },
{ "S-006", "J. Brennan", "Civic Union", "Halloway", "2019" },
{ "S-007", "T. Nakamura", "Civic Union", "Stonebridge", "2024" },
{ "S-008", "L. Vasquez", "Civic Union", "Eastmoor", "2011" },
{ "S-009", "K. Lindqvist", "Green List", "Fenbrook", "2024" },
{ "S-010", "D. Achterberg", "Green List", "Wyecombe", "2019" },
{ "S-011", "S. Iyer", "Independents", "Marbury", "2024" },
{ "S-012", "C. Duforest", "Independents", "Pellhurst", "2015" }
}
)

Bind: Party → Party · Seat ID → Seat ID · Member, Constituency, First elected → Tooltips. Also add a Seats = COUNTROWS ( 'Members' ) measure to Seat Count, so other visuals can dim the arch — see Being filtered by other visuals.

Keep First elected as text so the tooltip displays the full year instead of abbreviating it as a quantity.

The twelve-seat committee with R. Delgado’s tooltip showing Progressive Alliance, Ashvale East and 2024

5. Nothing to do with politics — a headcount ring

The same visual at 360° is a countable dot chart of any category.

TeamHeadcountSort Order
Engineering481
Sales312
Support223
Marketing124
Operations95
Finance66
Headcount =
DATATABLE (
"Team", STRING,
"Headcount", INTEGER,
"Sort Order", INTEGER,
{
{ "Engineering", 48, 1 },
{ "Sales", 31, 2 },
{ "Support", 22, 3 },
{ "Marketing", 12, 4 },
{ "Operations", 9, 5 },
{ "Finance", 6, 6 }
}
)

Settings: Arc 360, Seat outline on (it separates the dots nicely at this size), Legend Right center, Seat counts on.

The 128-person headcount ring with six teams and seat outlines

Expanding totals into one row per seat

If you have a totals table and want per-seat rows, the cleanest route is Power Query — see Party totals → one row per seat. If you'd rather stay in DAX, this builds the expanded table from the Chamber table above:

Chamber Seats =
VAR Expanded =
GENERATE (
Chamber,
SELECTCOLUMNS ( GENERATESERIES ( 1, Chamber[Seats] ), "Seat No", [Value] )
)
RETURN
ADDCOLUMNS (
Expanded,
"Seat ID", Chamber[Party] & "-" & FORMAT ( [Seat No], "000" )
)

The Seat ID expression prefixes the party name deliberately — Seat IDs must be unique across the whole dataset, and a bare 1, 2, 3… per party is not.

note

Power Query is the better home for this in a production model: a calculated table is recomputed on every refresh, and it can't be folded back to the source.

Next steps