Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多维数据集OLAP框架-如何使用连接?_Python_Database_Olap_Star Schema - Fatal编程技术网

Python多维数据集OLAP框架-如何使用连接?

Python多维数据集OLAP框架-如何使用连接?,python,database,olap,star-schema,Python,Database,Olap,Star Schema,我试图在一个非常简单的数据库上使用python的olap框架,但在连接表时遇到了一些问题 我的模式如下所示: Users table ID | name Products table ID | name | price Purchases table ID | user_id | product_id | date 立方体模型: { 'dimensions': [ {'name': 'user_id'}, {'name': 'product_id'}

我试图在一个非常简单的数据库上使用python的olap框架,但在连接表时遇到了一些问题

我的模式如下所示:

Users table
ID | name

Products table
ID | name | price

Purchases table
ID | user_id | product_id | date
立方体模型:

{
    'dimensions': [
        {'name': 'user_id'},
        {'name': 'product_id'},
        {'name': 'date'},
    ],
    'cubes': [
        {
            'name': 'purchases',
            'dimensions': ['user_id', 'product_id', 'date'],
            'measures': ['price']
            'mappings': {
                'purchases.user_id': 'users.id',
                'purchases.product_id': 'products.id',
                'purchases.price': 'products.price'
            },
            'joins': [
                {
                    'master': 'purchases.user_id',
                    'detail': 'users.id'
                },
                {
                    'master': 'purchases.product_id',
                    'detail': 'products.id'
                }
            ]
        }
    ]
}
现在我想显示所有的购买,显示产品的名称,用户名和购买日期。我似乎找不到办法来做这件事。文档有点少


谢谢

首先,让我们稍微修理一下模型。在您的模式中,每个维度有更多的属性:id和name,将来可能会有更多的细节。您可以通过将属性指定为列表来添加它们:
“attriubtes”:[“id”,“name”]
。还请注意,维度命名为实体
product
,而不是键
id\u product
。键
id\u product
只是
产品
维度的一个属性,就像
名称
或者将来可能是
类别
一样。维度反映了分析师的观点


现在我们忽略了日期应该是一个特殊的维度,把日期看作是单一的价值键,例如一年,而不是把事情复杂化。
“尺寸”:[
{“name”:“user”,“attributes”:[“id”,“name”]},
{“名称”:“产品”、“属性”:[“id”、“名称”]},
{“名称”:“日期”}
],
因为我们更改了维度的名称,所以必须在多维数据集的维度列表中更改它们:

“多维数据集”:[
{
“名称”:“采购”,
“尺寸”:[“用户”、“产品”、“日期”],
...
您的架构反映了经典的事务性架构,而不是传统的数据仓库架构。在这种情况下,您必须像以前一样明确,并提及所有必要的映射。规则是:如果属性属于事实表(逻辑视图),则键仅为
属性
,如
价格
,无表规范。如果属性属于维度,如
产品.id
,则语法为
维度.attribute
。映射字典的值为物理表和物理列。请参阅。架构的映射如下所示:

“映射”:{
“价格”:“产品.价格”,
“product.id”:“products.id”,
“产品名称”:“产品名称”,
“user.id”:“users.id”,
“user.name”:“users.name”
}
如果您的架构是:

fact purchases
id | date | user_id | product_id | amount

dimension product
id | name | price

dimension user
id | name
在这种情况下,您只需要联接,因为所有维度属性都在各自的维度表中。请注意事实表中的
金额
,在您的情况下,由于没有每次购买的购买产品的
计数
,因此与
产品
中的
价格
相同

以下是您的模型的更新模型:

{
“尺寸”:[
{“name”:“user”,“attributes”:[“id”,“name”]},
{“名称”:“产品”、“属性”:[“id”、“名称”]},
{“名称”:“日期”}
],
“立方体”:[
{
“名称”:“采购”,
“尺寸”:[“用户”、“产品”、“日期”],
“措施”:[“价格”],
“映射”:{
“价格”:“产品.价格”,
“product.id”:“products.id”,
“产品名称”:“产品名称”,
“user.id”:“users.id”,
“user.name”:“users.name”
},
“加入”:[
{
“master”:“purchases.user\u id”,
“详细信息”:“users.id”
},
{
“主控”:“采购.产品\u id”,
“详细信息”:“products.id”
}
]
}
]
}
只需使用命令,您就可以在不编写任何Python代码的情况下尝试该模型。为此,您需要
slicer.ini

[workspace]
中的
url
更改为指向您的数据库,并将
[model]
中的
路径更改为指向您的模型文件。现在您可以尝试:

curl "http://localhost:5000/aggregate"
此外,请尝试向下钻取:

curl "http://localhost:5000/aggregate?drilldown=product"

如果您需要任何进一步的帮助,请告诉我,我是多维数据集的作者。

OLAP不是为进行联接而设计的。也许可以使用SQL数据库。@AaronWatters Python的多维数据集框架提供了此功能。它是一个MySQL后端。为了澄清:联接对最终用户是隐藏的,它们是逻辑到物理映射的一部分,并在逻辑模型。此外,Cubes有许多关系数据库后端,不仅仅是MySQL—所有由SQLAlchemy支持的后端。这些后端包括:PostgreSQL、Oracle、SQLite等。“目前,我们忽略了日期应该是一个特殊维度这一事实”如果你想知道更多关于这方面的信息,并且正在使用SQL数据存储:将日期解析为字段的诀窍将在下面的文章中解释:字段名“id”和“name”是否有特殊含义?链接
https://pythonhosted.org/cubes/mapping.html
在“有关映射的更多信息”中返回404。可能它的意思是链接到此?
curl "http://localhost:5000/aggregate?drilldown=product"