您的位置:

处理cubes出现报错ModelError("Both dimensions and dimension_links provided, ""use only one.")

  发布时间:2023-02-17 22:04:23
报错的原因在python中使用cubes库时,如果同时在某个函数中提供了dimensions和dimension_links两个参数,会导致出现的错误。例如,如果要创建一个新的cube,可以使用dimensions参数指定维度,而不是使用dimension_links参数。假设我们有一个数据库表"sales",该表包含三个字段:"date"、"product"和"amount"。首先,我们可以使用cubes库中的Model定义维度和度量然后,我们可以定义一个cube并使用dimension_links参数指定维度与数据表之间的关系最后,我们可以使用该cube进行切片,聚合和统计操作这样就不会出现的错误。

报错的原因

python中使用cubes库时,如果同时在某个函数中提供了dimensions和dimension_links两个参数,会导致出现"ModelError("Both dimensions and dimension_links provided, ""use only one.")”的错误。这是因为这两个参数的功能重复,使用了两个参数会导致模型混淆,所以只能使用一个参数。

如何解决

解决方法是在使用cubes库时,只使用一个参数,不同的函数需要使用不同的参数,如果不确定该使用哪个参数,可以参考cubes库的文档说明。

例如,如果要创建一个新的cube,可以使用dimensions参数指定维度,而不是使用dimension_links参数

例如:


cube = cubes.Cube(
    name="my cube",
    dimensions=[
        cubes.Dimension("date", levels=["year", "month", "day"]),
        cubes.Dimension("product", levels=["category", "subcategory"])
    ]
)

另外,如果你要做一个slice,aggregate,facts 操作,可以使用dimension_links参数指定维度与数据表之间的关系,而不是使用dimensions参数


result = browser.aggregate(drilldown=["date","product"],aggregates=["amount"])

总之,使用cubes库时只使用一个参数并且根据文档中的说明使用正确的参数,避免出现“ModelError("Both dimensions and dimension_links provided, ""use only one.")”的错误。

使用例子

是的,这里是一个例子。假设我们有一个数据库表"sales",该表包含三个字段:"date"、"product"和"amount"。

首先,我们可以使用cubes库中的Model定义维度和度量:


from cubes import Workspace

workspace = Workspace()

# define dimensions
workspace.register_dimension(name="date", levels=["year","month","day"])
workspace.register_dimension(name="product", levels=["category","subcategory"])

# define measure
workspace.register_measure(name="amount",aggregation="sum")

# define fact table
workspace.register_table("sales",local_fields=["date","product","amount"])

然后,我们可以定义一个cube并使用dimension_links参数指定维度与数据表之间的关系:


cube = workspace.create_cube("sales_cube", dimension_links=["date","product"], fact_name="amount")

最后,我们可以使用该cube进行切片,聚合和统计操作:


browser = workspace.browser(cube)
result = browser.aggregate(drilldown=["date","product"],aggregates=["amount"])

这样就不会出现 "ModelError("Both dimensions and dimension_links provided, ""use only one.")”的错误。