Skip to main content

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.parent_value(measure, /, *, degrees, apply_filters=False, total_value=None, dense=False)

Return a measure which values are equal to the values of the given measure, at a member that is located at a higher level on each of the specified hierarchy. This operation is also called drilling up a hierarchy.
  • Parameters:
    • measure (VariableMeasureConvertible | str) – The measure from which the values are copied.
    • degrees (Mapping [Hierarchy , int ]) – The number of levels to go up to select the parent member along any given hierarchy.
    • apply_filters (bool) – Whether or not the query filters on hierarchies specified in the degrees mapping must be applied when computing the value at the parent member.
    • total_value (MeasureConvertible | None) – The value to return when the drill up went above the top level of all the hierarchies in the degrees mapping.
    • dense (bool) – When True, the parent value will be replicated on all members of the levels of the hierarchies in the degrees mapping, even those with no value for the given measure.
  • Return type: MeasureDefinition

Example

>>> df = pd.DataFrame(
...     columns=["Year", "Month", "Day", "Shop", "Quantity", "Other"],
...     data=[
...         (2019, 7, 1, "Shop1", 15, 245),
...         (2019, 7, 2, "Shop1", 20, 505),
...         (2019, 6, 1, "Shop2", 25, 115),
...         (2019, 6, 2, "Shop2", 15, 135),
...         (2018, 7, 1, "Shop1", 5, 55),
...         (2018, 7, 2, "Shop2", 10, 145),
...         (2018, 6, 1, "Shop1", 15, 145),
...         (2018, 6, 2, "Shop2", 5, 155),
...     ],
... )
>>> table = session.read_pandas(
...     df,
...     table_name="Parent Value",
...     default_values={"Year": 0, "Month": 0, "Day": 0},
... )
>>> cube = session.create_cube(table)
>>> h, l, m = cube.hierarchies, cube.levels, cube.measures
>>> h["Date"] = [table["Year"], table["Month"], table["Day"]]
>>> m["Degree 1"] = tt.parent_value(m["Quantity.SUM"], degrees={h["Date"]: 1})
>>> m["Degree 2"] = tt.parent_value(m["Quantity.SUM"], degrees={h["Date"]: 2})
>>> m["Degree 2 with Quantity total"] = tt.parent_value(
...     m["Quantity.SUM"],
...     degrees={h["Date"]: 2},
...     total_value=m["Quantity.SUM"],
... )
>>> m["Degree 2 with Other total"] = tt.parent_value(
...     m["Quantity.SUM"],
...     degrees={h["Date"]: 2},
...     total_value=m["Other.SUM"],
... )
>>> cube.query(
...     m["Quantity.SUM"],
...     m["Other.SUM"],
...     m["Degree 1"],
...     m["Degree 2"],
...     m["Degree 2 with Quantity total"],
...     m["Degree 2 with Other total"],
...     levels=[l["Day"]],
...     include_totals=True,
... )
                Quantity.SUM Other.SUM Degree 1 Degree 2 Degree 2 with Quantity total Degree 2 with Other total
Year  Month Day
Total                    110     1,500                                            110                     1,500
2018                      35       500      110                                   110                     1,500
      6                   20       300       35      110                          110                       110
            1             15       145       20       35                           35                        35
            2              5       155       20       35                           35                        35
      7                   15       200       35      110                          110                       110
            1              5        55       15       35                           35                        35
            2             10       145       15       35                           35                        35
2019                      75     1,000      110                                   110                     1,500
      6                   40       250       75      110                          110                       110
            1             25       115       40       75                           75                        75
            2             15       135       40       75                           75                        75
      7                   35       750       75      110                          110                       110
            1             15       245       35       75                           75                        75
            2             20       505       35       75                           75                        75
>>> h["Date"].slicing = True
>>> cube.query(
...     m["Quantity.SUM"],
...     m["Other.SUM"],
...     m["Degree 1"],
...     m["Degree 2"],
...     m["Degree 2 with Quantity total"],
...     m["Degree 2 with Other total"],
...     levels=[l["Day"]],
...     include_totals=True,
... )
               Quantity.SUM Other.SUM Degree 1 Degree 2 Degree 2 with Quantity total Degree 2 with Other total
Year Month Day
2018                     35       500                                             35                       500
     6                   20       300       35                                    35                       500
           1             15       145       20       35                           35                        35
           2              5       155       20       35                           35                        35
     7                   15       200       35                                    35                       500
           1              5        55       15       35                           35                        35
           2             10       145       15       35                           35                        35
2019                     75     1,000                                             75                     1,000
     6                   40       250       75                                    75                     1,000
           1             25       115       40       75                           75                        75
           2             15       135       40       75                           75                        75
     7                   35       750       75                                    75                     1,000
           1             15       245       35       75                           75                        75
           2             20       505       35       75                           75                        75
>>> h["Date"].slicing = False
>>> m["Degree 1 with applied filter"] = tt.parent_value(
...     m["Quantity.SUM"], degrees={h["Date"]: 1}, apply_filters=True
... )
>>> cube.query(
...     m["Quantity.SUM"],
...     m["Degree 1"],
...     m["Degree 1 with applied filter"],
...     levels=[l["Day"]],
...     include_totals=True,
...     filter=l["Year"] == "2018",
... )
                Quantity.SUM Degree 1 Degree 1 with applied filter
Year  Month Day
Total                     35
2018                      35      110                           35
      6                   20       35                           35
            1             15       20                           20
            2              5       20                           20
      7                   15       35                           35
            1              5       15                           15
            2             10       15                           15
>>> cube.query(
...     m["Quantity.SUM"],
...     m["Degree 1"],
...     m["Degree 1 with applied filter"],
...     levels=[l["Day"]],
...     include_totals=True,
...     filter=l["Shop"] == "Shop1",
... )
                Quantity.SUM Degree 1 Degree 1 with applied filter
Year  Month Day
Total                     55
2018                      20       55                           55
      6                   15       20                           20
            1             15       15                           15
      7                    5       20                           20
            1              5        5                            5
2019                      35       55                           55
      7                   35       35                           35
            1             15       35                           35
            2             20       35                           35
See also: atoti.total() to take the value at the top level member on each given hierarchy.