whole cube
o cell = Cell(cube)
browser.aggregate(o cell)
Total
browser.aggregate(o cell,
drilldown=[9 “date”])
2006 2007 2008 2009 2010
✂ cut = PointCut(9 “date”, [2010])
o cell = o cell.slice(✂ cut)
browser.aggregate(o cell,
drilldown=[9 “date”])
Jan Feb Mar Apr March April May ...
SQL Features
■ does not require DB write access
■ denormalisation
■ denormalised browsing, indexing
■ simple date datatype dimension
■ extraction of date parts during mapping
■ multiple schema support
Limitations
■ one cut per dimension in a cell
■ logical conjunction of cuts (cut1 AND cut2 AND cut3 ...)
■ dimension-only selection
■ one - default hierarchy
■ some internals are ready for multiple
Editor's Notes
OLAP and Logical Model, Architecture, Slicing and Dicing, HTTP Server, SQL Backend\n\n
\n
\n
Q: Who is familiar with OLAP?\n
quick setup and reporting\ndoes not cover everything (intentionally)\n
example application - public procurements of slovakia\n
quick setup and reporting\ndoes not cover everything (intentionally)\n
will talk about modelling first, then reporting, then going to mix\n
how it looks like and what it does?\n
FIXME: add slicer tool here\n
not going into details, but just to align terminology and define context\n
not so rare we see creating reports directly from what is available, instead of starting with business needs and tryig to find a way how to derive it from what is available\n
different approach to data use, different needs\nwhile in apps you are focusing on transactions - trans data/oltp, in reporting you are focusing on analysis -> analytical data\nlogically separate (does not have to be physically separate)\n
\n
\n
\n
CONTEXT: where did the sale happened? who signed the contract?\nFILTER: how much was spent for construction work?\nAGGREGATION SCOPE: what was the revenue by country?\n\nused for ordering or sorting\ndefine master-detail relationships\n
\n
\n
provides metadata to easily create apps\n
\n
\n
\n
\n
\n
\n
what the browser does?\n
aggregating measures\n
\n
aggregation browser has to have concrete backend implementation\n
+ bunch of other stuff\n
context\n
before I will talk about aggregation browser, I have to introduce a cell\n
\n
\n
our filter/selection defines the cell\nthis is kind of multidimensional “breadcrumbs”\n
path - taken from file system terminology for easier understanding\nthose are keys\nnote that displayed is level label, not a key\n
... let’s put it into a picture\n
\n
“aggregation result” was created according to usual report look\n
FIXME: add picture\n
you can specify multiple dimensions and explicit level to be drilled down (for example “month” level of a date dimension)\n
it provides list of records, which are represented as dictionaries \nyou have to find out which one is level attribute or the key\n\n
no need to find the context of dimension of interest\nif not sufficient, one can still fall-back to the manual method\n
\n
facts – get details\nvalues - can be used to create selection boxes, also level can be specified\ncell_details is used for creating the multidimensional breadcrumbs mentioned before - it contains data to humanly describe current context of interest\nordering and pagination is supported\n
what was that “cell” thing?\n
\n
also show hierarchy\n
\n
\n
same drilldown, different cell\n
implicit: raises error if current level is the last one\nexample: you are exploring year 2010 (cell) and would like to see split by year (higher level)\n
\n
\n
\n
\n
\n
\n
\n
\n
just to name a few...\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
powered by sqlalchemy\n
powered by great abstraction framework\nconstruction of SQL statements\n
\n
\n
\n
denormalized\n
thanks to new browser and browsing context it is possible to transparently switch between original snowflake and generated denormalized view (which can be materialized and indexed based on dimension level keys)\n
in which table and which column is the attribute?\n
\n
\n
\n
\n
if someone would like to contribute with his skills, he is more than welcome and I will help\n
so if you have OS app, like Django that more users use, you can publish reporting model for others.\nput your cube in the Wiki\n