먼저 모델을 조금 수정합시다. 스키마에서 차원 당 특성이 더 많습니다 (ID와 이름). 앞으로 더 자세한 정보를 얻게 될 수도 있습니다. 속성을 목록으로 지정하여 추가 할 수 있습니다 : "attriubtes": ["id", "name"]
. 치수가 id_product
키가 아닌 엔티티 product
으로 지정됩니다. id_product
키는 name
이거나 미래에는 아마도 category
인 product
차원의 속성 일뿐입니다. 차원은 분석가의 관점을 반영합니다.
당분간은 날짜가 특별한 차원이어야하며 여기서 날짜를 단일 값 키로 간주해야합니다 (예 : 1 년). 여기서 복잡한 작업이 아닌 것이 좋습니다.
"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
을 확인하십시오. 구입 한 제품 당 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"
}
]
}
]
}
당신은 단지 slicer
명령을 사용하여 파이썬 코드를 작성하지 않고 모델을 시도 할 수 있습니다 : 여기
해당 모델에 업데이트 된 모델이다.이를 위해 당신은
slicer.ini
configuration file이 필요합니다
[workspace]
에서
[server]
backend: sql
port: 5000
log_level: info
prettyprint: yes
[workspace]
url: sqlite:///data.sqlite
[model]
path: model.json
변경 url
를 데이터베이스를 가리 키와 모델 파일을 가리 키도록 [model]
에 path
을 변경할 수 있습니다. 지금 당신은 시도 할 수 있습니다 :
curl "http://localhost:5000/aggregate"
또한 드릴 다운을 시도 : 당신이 더 도움이 필요하면
curl "http://localhost:5000/aggregate?drilldown=product"
, 그냥 내가 큐브 저자 해요 알려주세요.
OLAP는 조인을 수행하도록 설계되지 않았습니다. 대신 SQL 데이터베이스를 사용하십시오. –
@AaronWatters Python의 Cubes 프레임 워크는이 기능을 제공합니다. MySQL 백엔드입니다. – user1491915
명확한 설명 : 조인은 최종 사용자에게 숨겨져 있으며 논리적 - 물리적 매핑의 일부이며 논리적 모델에 지정되어 있습니다. 또한 Cubes에는 MySQL뿐만 아니라 SQLAlchemy에서 지원하는 모든 백엔드가 포함 된 많은 관계형 데이터베이스 백엔드가 있습니다. 여기에는 PostgreSQL, Oracle, SQLite 등이 포함됩니다. – Stiivi