added all_aggregate_attributes; protect agains None
after-merge fix
after-merge fix
after-merge fix
Supress warning about not joined fact
Supress warning about not joined fact
Supress warning about not joined fact
added tables_for_attributes()
added tables_for_attributes()
added tables_for_attributes()
moved SQL utility fufnctions order_column() and conditiona_conjunction()
moved SQL utility fufnctions order_column() and conditiona_conjunction()
moved SQL utility fufnctions order_column() and conditiona_conjunction()
addad __hash__ for attribute base
addad __hash__ for attribute base
addad __hash__ for attribute base
renamed level_attributes() to all_attributes(); added string representation of drilldown; removed cut_levels()
renamed level_attributes() to all_attributes(); added string representation of drilldown; removed cut_levels()
renamed level_attributes() to all_attributes(); added string representation of drilldown; removed cut_levels()
Added analysis of attribute-to-fact relationships; new sql/query classes in separate file: QueryBuilder, SnowflakeSchema (WIP)

Note: Works with all kinds of joins if there is no condition from
"outer detail"