まず、モデルを少し修正しましょう。あなたのスキーマでは、ディメンションごとにより多くの属性があります: id と name です。将来、より詳細になる可能性があります。属性をリストとして指定することで、それらを追加できます: "attriubtes": ["id", "name"]
. また、ディメンションはproduct
キーではなくエンティティとして名前が付けられていることに注意してくださいid_product
。キーは、ディメンションid_product
の単なる属性であり、現在または将来的には可能性があります。ディメンションは、アナリストの視点を反映しています。product
name
category
当面は、日付が特別な次元であるべきだという事実を無視し、ここで物事を複雑にしないように、日付を年などの単一値キーと見なします。
"dimensions": [
{"name": "user", "attributes": ["id", "name"]},
{"name": "product", "attributes": ["id", "name"]},
{"name": "date"}
],
ディメンションの名前を変更したため、キューブのディメンション リストでそれらを変更する必要があります。
"cubes": [
{
"name": "purchases",
"dimensions": ["user", "product", "date"],
...
スキーマは、従来のデータ ウェアハウス スキーマではなく、従来のトランザクション スキーマを反映しています。この場合、以前のように明示的にし、必要なすべてのマッピングについて言及する必要があります。ルールは次のとおりです。属性がファクト テーブル (論理ビュー) に属している場合、キーは のattribute
ようにのみprice
であり、テーブルの指定はありません。属性が などのディメンションに属している場合product.id
、構文はdimension.attribute
です。マッピング ディクショナリの値は、物理テーブルと物理列です。マッピングの詳細を参照してください。スキーマのマッピングは次のようになります。
"mappings": {
"price": "products.price",
"product.id": "products.id",
"product.name": "products.name",
"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
この場合、すべてのディメンション属性がそれぞれのディメンション テーブルにあるため、結合のみが必要です。ファクト テーブルの に注意してamount
ください。この場合、count
購入ごとに購入した製品がないため、 と同じにprice
なりproduct
ます。
モデルの更新されたモデルは次のとおりです。
{
"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"
}
]
}
]
}
コマンドを使用するだけで、Python コードを記述せずにモデルを試すことができますslicer
。slicer.ini
そのためには、構成ファイルが必要になります。
[server]
backend: sql
port: 5000
log_level: info
prettyprint: yes
[workspace]
url: sqlite:///data.sqlite
[model]
path: model.json
データベースを指すように変更しurl
、モデル ファイルを指すように変更します。今すぐ試すことができます:[workspace]
path
[model]
curl "http://localhost:5000/aggregate"
また、ドリルダウンしてみてください:
curl "http://localhost:5000/aggregate?drilldown=product"
さらにサポートが必要な場合は、お知らせください。私は Cubes の作成者です。