最初にモデルを少し修正しましょう。あなたのスキーマには、ディメンションごとにIDと名前の属性が増えます。属性をリストとして指定することで追加できます:"attriubtes": ["id", "name"]
。ディメンションの名前は、id_product
というキーではなく、エンティティproduct
という名前になっています。キーid_product
は、name
または今後の多分category
のように、product
ディメンションの属性に過ぎません。ディメンションはアナリストの視点を反映しています。
当分の間、日付は特別な次元でなければならず、ここでは複雑にならないように、日付を単一値キー、たとえば年と見なすべきであるという事実は無視されます。
"dimensions": [
{"name": "user", "attributes": ["id", "name"]},
{"name": "product", "attributes": ["id", "name"]},
{"name": "date"}
],
我々はディメンションの名前を変更したため、我々は、キューブのディメンション・リストにそれらを変更する必要があります。
"cubes": [
{
"name": "purchases",
"dimensions": ["user", "product", "date"],
...
あなたのスキーマは、古典的なトランザクションのスキーマではなく、従来のデータ・ウェアハウス・スキーマを反映しています。この場合、明示的にする必要があります。必要なマッピングをすべて記述する必要があります。ルールは、アトリビュートがファクトテーブル(論理ビュー)に属している場合は、price
などのテーブルの指定がない場合はattribute
になります。属性が次元に属している場合(product.id
など)、構文はdimension.attribute
です。マッピングディクショナリの値は、物理テーブルと物理カラムです。 more information about mappingsを参照してください。すべてのディメンションの属性がそれぞれにあるので、この場合は
fact purchases
id | date | user_id | product_id | amount
dimension product
id | name | price
dimension user
id | name
あなただけ参加する必要があります。あなたのスキーマがいた場合は、マッピングを記述する必要はないだろう
"mappings": {
"price": "products.price",
"product.id": "products.id",
"product.name": "products.name",
"user.id": "users.id",
"user.name": "users.name"
}
:スキーマのマッピングは次のようになりディメンション表ファクトテーブルのamount
にご注意ください。をproduct
と同じにすると、ご購入の際にcount
個の購入済み製品が存在しない場合があります。ここで
には、モデルの更新されたモデルです。
{
"dimensions": [
{"name": "user", "attributes": ["id", "name"]},
{"name": "product", "attributes": ["id", "name"]},
{"name": "date"}
],
"cubes": [
{
"name": "purchases",
"dimensions": ["user", "product", "date"],
"measures": ["price"],
"mappings": {
"price": "products.price",
"product.id": "products.id",
"product.name": "products.name",
"user.id": "users.id",
"user.name": "users.name"
},
"joins": [
{
"master": "purchases.user_id",
"detail": "users.id"
},
{
"master": "purchases.product_id",
"detail": "products.id"
}
]
}
]
}
あなただけslicer
コマンドを使用して、任意のPythonコードを記述せずにモデルを試すことができます。あなたのデータベースをポイントして、モデルファイルを指すように[model]
でpath
を変更する[workspace]
で
[server]
backend: sql
port: 5000
log_level: info
prettyprint: yes
[workspace]
url: sqlite:///data.sqlite
[model]
path: model.json
変更url
:そのためにあなたはslicer.ini
configuration fileが必要になります。今、あなたは試すことができます:
curl "http://localhost:5000/aggregate"
また、ドリルダウンをしよう:あなたはそれ以上の助けが必要な場合は
curl "http://localhost:5000/aggregate?drilldown=product"
、ちょうど私に知らせて、私はキューブの作者です。
OLAPは結合を行うようには設計されていません。代わりにSQLデータベースを使用してください。 –
@AaronWatters PythonのCubesフレームワークはこの機能を提供します。 MySQLのバックエンドです。 – user1491915
明確にするために、ジョインはエンドユーザから隠されています。ジョインは論理と物理のマッピングの一部であり、論理モデルで指定されます。また、キューブにはMySQLだけでなく、SQLAlchemyでサポートされているバックエンドがたくさんあるリレーショナルデータベースバックエンドがあります。これには、PostgreSQL、Oracle、SQLiteなどが含まれます。 – Stiivi