Documentation Index
Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
Use this file to discover all available pages before exploring further.
atoti.switch(subject, cases, /, *, default=None)
Return a measure equal to the value of the first case for which subject is equal to the case’s key.
cases’s values and default must either be all numerical, all boolean or all objects.
- Parameters:
- subject (VariableMeasureConvertible) – The measure or level to compare to cases’ keys.
- cases (Mapping *[*MeasureConvertible | None | AbstractSet *[*MeasureConvertible | None ] , MeasureConvertible ]) – A mapping from keys to compare with subject to the values to return if the comparison is
True.
- default (MeasureConvertible | None) – The measure to use when none of the cases matched.
- Return type:
MeasureDefinition
Example
>>> df = pd.DataFrame(
... columns=["Id", "City", "Value"],
... data=[
... (0, "Paris", 1.0),
... (1, "Paris", 2.0),
... (2, "London", 3.0),
... (3, "London", 4.0),
... (4, "Paris", 5.0),
... (5, "Singapore", 7.0),
... (6, "NYC", 2.0),
... ],
... )
>>> table = session.read_pandas(df, keys={"Id"}, table_name="Switch example")
>>> cube = session.create_cube(table)
>>> l, m = cube.levels, cube.measures
>>> m["Continent"] = tt.switch(
... l["City"],
... {
... frozenset({"Paris", "London"}): "Europe",
... "Singapore": "Asia",
... "NYC": "North America",
... },
... )
>>> cube.query(m["Continent"], levels=[l["City"]])
Continent
City
London Europe
NYC North America
Paris Europe
Singapore Asia
>>> m["Europe & Asia value"] = tt.agg.sum(
... tt.switch(
... m["Continent"],
... {frozenset({"Europe", "Asia"}): m["Value.SUM"]},
... default=0.0,
... ),
... scope=tt.OriginScope({l["Id"], l["City"]}),
... )
>>> cube.query(m["Europe & Asia value"], levels=[l["City"]])
Europe & Asia value
City
London 7.00
NYC .00
Paris 8.00
Singapore 7.00
>>> cube.query(m["Europe & Asia value"])
Europe & Asia value
0 22.00