Python Cubes具有层次结构

时间:2015-11-26 10:33:38

标签: python olap olap-cube cubes

所以,这里有一些国家的某些参数值的模型(django模型), 按科目划分(如中心科目,西科目等) 和行政单位(主题区域。像俄罗斯中央主题的莫斯科地区)。

class Years(models.Model):
    year = models.PositiveSmallIntegerField()


class Geography(models.Model):
    name = models.CharField(max_length=500)

    subject_id = models.UUIDField(null=True)
    subject_label = models.CharField(max_length=500, null=True)

    administrative_unit_id = models.UUIDField(null=True)
    administrative_unit_label = models.CharField(max_length=500, null=True)


class Param(models.Model):
    name = models.CharField(max_length=500)
    codename = models.CharField(max_length=5)


class Fact(models.Model):
    year = models.ForeignKey(Years)
    geography = models.ForeignKey(Geography)
    param = models.ForeignKey(Param)
    value = models.DecimalField(max_digits=20, decimal_places=5, null=True)

每个参数值都有尺寸: 年,地理(主题或行政单位。但仅适用于地理位置),以及参数类型/代码/名称。

所以在models.json中我们可以看到Geography有什么级别: 科目由行政单位组成,但每个科目都有自己的年份参数值。 (对于行政单位也是如此)。

models.js

{
    "dimensions": [
      {
        "name": "cubes_viewer_years",
        "levels": [
          {
            "name": "cubes_viewer_years",
            "label_attribute": "year",
            "attributes": [ "id", "year"],
            "info": { "cv-datefilter": true}
          }
        ]
      },
        {
            "name": "cubes_viewer_param",
            "levels": [
                {
                    "name" : "param",
                    "attributes": ["id", "codename", "name"],
                    "label_attribute": "name"
                }
            ]
        },

        {
            "name": "cubes_viewer_geography",
            "levels": [
                {
                    "name": "subject",
                    "attributes": [ "subject_id", "subject_label"],
                    "key": "subject_id",
                    "label_attribute": "subject_label"
                },
                {
                    "name": "administrative_unit",
                    "attributes":
                    [ "administrative_unit_id", "administrative_unit_label"],
                    "key": "administrative_unit_id",
                    "label_attribute": "administrative_unit_label"
                }
            ]
        }

    ],
    "cubes": [
      {
        "name": "cubes_viewer_fact",
        "label": "Индикаторы",
        "measures": [{"name": "value", "aggregates": ["sum", "avg", "max", "min"]}],
        "dimensions": ["cubes_viewer_years", "cubes_viewer_param", "cubes_viewer_geography"],
        "joins": [
          {"master": "cubes_viewer_fact.year_id", "detail": "cubes_viewer_years.id"},
          {"master": "cubes_viewer_fact.param_id", "detail": "cubes_viewer_param.id"},
          {"master": "cubes_viewer_fact.geography_id", "detail": "cubes_viewer_geography.id"}
        ]
      }
    ]
}

问题: 如果我想按行政单位进行深入研究 - 一切正常  (除了名为SUBJECT_NAME /的每个主题的值,不是SUBJECT_NAME / ADMINISTRATIVE_UNIT_NAME。(在多维数据集查看器的过滤器面板中))。 一切都过滤得很好。

但是,如果我想按主题向下钻取 - 立方体查看器的过滤器面板允许选择太多的主题名称值 - 就像每个管理单元名称的一个主题(非唯一)一样。

这是不对的。 如何为这种数据层次构建立方体模型层次结构。 或者我可以分开地理表。是这样的 - 如何构建正确的立方体模型层次结构?

我可能会错过文档中的内容,但我尝试使用来自cube viewer webvisits app的示例 - 以上描述是我得到的......

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将Geography分成两个表(在这种情况下,您可以向join添加一个定义如何连接这些表的条目。)

但你不应该这样做。多维数据集可以处理这个,你的连接和维度配置似乎对我来说。

也许你错过了mappings

"mappings": {
    "cubes_viewer_geography.subject_id": "cubes_viewer_geography.subject_id",
    "cubes_viewer_geography.subject_label": "cubes_viewer_geography.subject_label",
    "cubes_viewer_geography.administrative_unit_id": "cubes_viewer_geography.administrative_unit_id",
    "cubes_viewer_geography.administrative_unit_label": "cubes_viewer_geography.administrative_unit_label"
}