atoti.switch()#
- 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:
MeasureDescription
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
See also