我现在正试图把我的头绕在OLAP立方体上。
对于学习,我使用立方体框架。
我目前正在制作一个立方体,它取决于来自两个不同存储的尺寸。
我已经尝试使用所有定义的维度在默认情况下都是公共的这一事实来实现这一点。
下面是一些匿名代码,展示了我是如何解决这个问题的:
workspace = Workspace()
workspace.register_store("store1", "sql", schema="schema1", url="postgresql://<URL>")
workspace.register_store("store2", "sql", schema="schema2", url="postgresql://<URL>")
workspace.import_model("model1.json", store="store1")
workspace.import_model("model2.json", store="store2")
workspace.import_model("cube_with_dimensions_from_model1_and_model2.json")
browser = workspace.browser("cube_with_dimensions_from_model1_and_model2")
我得到错误
cubes.errors。NoSuchDimensionError:维度' dimension_from_model2 '没有找到
这显然意味着它无法找到在model1和model2中导入的维度。
有谁能告诉我解决这个问题的正确方向吗?PS:如果有更多的样本项目比这些发现在这里我将非常感激知道。
Cubes当前为每个存储创建一个单独的名称空间,如果没有另行指定的话。在您的示例中,每个模型最终都位于存储的名称空间中(即store1
和store2
)。默认(全局)命名空间保持为空,因此工作区无法在其他存储中找到您的维度。
尝试以下选项之一:
。使用默认命名空间
workspace.import_model("model1.json", "store1", namespace="default")
workspace.import_model("model2.json", "store2", namespace="default")
B。单独的公共尺寸
将共享的维度放入model_common.json
(或者更确切地说是common.cubesmodel
目录)并单独导入,不需要指定任何存储或命名空间(维度最终将在默认/全局命名空间中结束):
workspace.import_model("common.cubesmodel")
workspace.import_model("model1.json", "store1")
workspace.import_model("model2.json", "store2")