Merken

Reporting on Rails - ActiveRecord and ROLAP Working Together

Zitierlink des Filmsegments
Embed Code

Automatisierte Medienanalyse

Beta
Erkannte Entitäten
Sprachtranskript
the vehicle and the Zhou
and right let's get this party started a moon OK so this is reporting on rails Active Record in our lab working together the my name is tony I'm seeing a
developer at Moby in Indiana we manage the corporate cell phone accounts for Fortune 500 companies are everywhere from Bill optimization to device procurement including 1 tech support I work specifically on the billing in reporting team where I basically work in size with the 1 million + devices every have and management plus all of the billing data that goes back several years what I simply
do is take information from various sources carrier billing of tickets among copper call center of orders placed in carriers showed them the post breast sprinkle semantic on top in Out pops pretty charts and graphs that our
clients love it is the here we so the
better explain how what reporting is the best I can do is use my own current expansive of Moby way back way back in time around 2012 ownership came to the dev team and added to the dreaded D word they wanted a bunch of dashboards report on all the data that we have not just 1 dashboard dashboards far quite administrators dashboards for internal support staff and dashboards for ownership actually see other companies doing they want a user-defined filtering can slice and dice by despite any point of data that you want and various other bits of scope creep that came up over the years so where do we begin on this well couple notes that the dev team laid
out in front of that we don't know what we don't be Bolton bloat in our results that that means we don't want actual Active Record objects coming back in the database active records kind a large and we don't really need all that data that's coming back which means less memory what we really want is generic uniform data coming back from whatever system we build this means a plain old bunch arrays with rows of hashes with the information that we want that we can take that call to Jason on show it into the uh flavor of the month JavaScript frightened framework for charts and will be on our way so what is reporting anyway well I would assume most of us are apps run against a uh relational database relational database holds data data is completely worthless to you and me humans can't really work with data computers work with data what humans can work with is information would be porting in analytics does on a higher level is taking data converted to information so humans can actually make decisions out of it and more importantly reporting answers questions and
this is probably the most important step in preparing your app to generate dashboards is to figure out up front what questions you want to answer that means going to the theory that all the primary users and ask what in from what what you wanna know what information do you need because if you don't get that we need to start randomly for inquiries against postcursor my sequel it referring spaghetti at the wall and you probably won't that end up was a result or product that people will you can use because it doesn't answer the questions of the care about the here's some examples of questions for each of the 3 stick that stakeholder groups for Moby reporting and we wanna answer all these plus more effectively so where we go about doing that before fortunately there is an
industry standard term called overlap online analytical processing that is built for data warehousing an analytics a commonly refers more traditional at products everything is rolled up into memory in the form of datacubes which all the information is pre slice and dice pre grouped together and everything up front so you can run graze on it very fast in the lab commonly deals with the aggregates counts maximands averages of you did don't really deal commonly with the individual rose from from the data you care about the grand picture however a laughed you commonly use overlap with people tacked on to Oracle products bicycle products as much enterprise stuff when you think enterprise you think money and we didn't have money so there's gonna be a better way borrow led to the rescue This is relational online analytical processing this is a laugh that runs with SQL which is what the data which is lot normal database talks with it also allows for dynamic worries on to be generated on the fly so we can get any information we want that out very quickly which is some set up and what's nice about of our lab as well is that we can work with both art historical data which is all the billing information in our transactional data which is the uh supporting could succumb to draw up who local Support Center of the ever-changing lines the service that change on a daily basis that's transactional it changes all the time so are all work with both well letters were designed for uh stuff happened historical information stuff that happens in the past what it said you don't touch it anymore so like anything in a pricey there is a
crap 10 of terminology that comes with it no now linear to all these and what's nice about the overlap is that you can relate any elected terminology to sequel any can also related to something in rails so when used as examples to build up to the vocabulary because when you work with uh reporting you wanna think in a lab terms not just simple sequel the 1st term is a
factor model I'm also known as a fact table this is the starting point to get information out of you and out of the database the sequel land from clause the primary table that has the information that you want in real so is a standard model so by looking at questions that are users want to answer we can extrapolate out pretty easily what a factor model is in this case the support tickets table in lines Table ch
aided mentioned is a way to take your data and slice and dice it into various chunks the commonly these are relations to other tables in the database of foreign keys linking to other tables you can also be columns of liver directly on the factor model as well In mobiles in in the Leyland we have costs in our living on our lines table you can a group by cost center to get a report out of that or 8 lines service has exterior we have a carriers table you can link to that to get information out that way so dimension in the gland is always a group by and if you have a with the 1 I jump to another table it's also a joint In real this is a standard column or the has 1 or belongs to relationship the so when you look at the questions you 1 answer for recording our always look for the word by I want something I wanted some of something by something so in this case we ask for tickets by type types so when whenever by type it active lines a service group by carrier so when adjoining going adjoining if the stable grew by carrier next up as a dimension
hierarchies this is a way to go up and down a hierarchy of information of your dimension are the most common example is dates so when you think about I want a group of stuff of group of orders um grouped by day plasty disproved by the day but I wanna go up level I once I want everything group by the past 5 months everything from the quarter everything from the year in the that hierarchy you basically a structure built to go up and down it from more general groups the data to more specific groups I'm land we have device is a device has a model number and manufacture an operating system in wireless technology that's another example hierarchy we can go up and down you groups of data
the dimension member or I prefer calling them dimension labels is actual information that when you look at results report in working I worked with so lines has a curia ID on it we could easily group by that but when you look at it look at it in a table or a pie chart a human can make sense of that so instead of a label that you use and shoving the pie chart is the In what bad case the name of the carrier if the dimension lives on the actual tables of for example cocinar the cost is the same it's in the group by can off the label the next up is filters this is not really uh in a lab term this because all lattice commonly it's set up for 1 to pre slice and I should data you don't really have much maneuverability unless you were building freely different cube to group biofilter by something else because are working with are we can use the where clause in sequel to further the shrink the dataset down or a given but more specific information so in sequel your filters aware cause in rails this is your the where method uh standard Active Record scopes or if use the ransac GM that results in a where clause as well which can come in pretty handy can
measure in a lab terms is basically the aggregate of you and your average sum max-min cannot be much any aggregate based uh function that your database can provide in which you commonly do is the measure is also the column that you plug into the function so I want the sum of the total charges for water that's the measure it's the sun in the con total charges count is obviously the exception because you only count on a column in most commonly used count star it's simple and and finally had the metric this is the
report metric is is a fancy way of asking readers is the result of the question that you want so in sequel this the whole Corey this whole damn thing it's all record shop together and executed the database these
are examples of the entire question can be the metric or part of the question can also be a metric which can do with our lab is start with the very simple and specific metric that you wanna ask and then attack on dimensions and more filters let it later so you could be in the cost of having a bank of pre-built simple metrics that to maybe a user interface just 3 code through configuration in tacking on more stuff save a base case in and can expand that out everyone so I know that's a lot of
here's everything shove together hopefully the colors stand out of but we have a complete question the whole thing in this case is the metric you had the sum for a measure um mobile charges would be will extrapolate the table of that artifact model fact table last billing period is a filter in your grouping by cost center so that is your dimensions any metric can have as many filters and as many dimensions you want and just keep in mind the more attack on obviously more complex Aquarius but this is essentially all of or overlap in a nutshell with the sequel equivalent in the with rails equivalent so that's pretty much the industry level of it and how do you go about implementing it or 1st few data after actually organized in a way
that is conducive to reporting the most common way is called Star Schema there's another us set up called snowflake schema which is basically star schema plus plus I prefer Star Schema because it's simpler emits more direct and it's kind of easier to um visualizing your head the idea is if you can take all your tables and Chart them out on a graph or link them together you have in fact models are a fact tables in the center of it in branching off a that is every dimension that could possibly run against the fact table again a dimension can be a simple relation or can be a column on the fact table but the end result is map them all together it looks like a star now will gotcha in this is pretty much set up for mean of standard sequel is that it's really hard to report on as many relationships i it is possible you control the magical distinct keyword in the front of view query of if you aren't post-stressed pacifically that can easily result in invalid sequel just because way post press works um the reason why doesn't work that has many very well is because we knew are aggregating and joining you effect will be effectively get multiple rows back to get rows back and then your semi against those 2 grows in your numbers are so avoid wanting to report on has any relationships as much as possible the other way around this is to subqueries which is hell of slow I don't recommend that the so using know these
examples here's 3 fact table that we have identified support ticket line service in a row on a bill in all the and various dimensions that they can dimension off of and again some of these are actually just other tables and some them are actual columns on the database on the effect model notice in line of axioms works and we have a carrier carrier account but in will be a cure account has a carrier so why not just why carrier-rate dimension online white is line have a separate relation for that well you wanna avoid doing multiple jumps as much as possible with are at the more joined to do the slow or the result will be so we would be doing Milby is the normalized a lot of stuff that we wanna a group by and put them on directly on the fact model I wasn't around that we could get around this with that has 1 through and effectively had exterior relationship directly online the sequel can be generated just fine but again resulting in a double joint at that point also something interesting to know is created data in the bill date for these 2 facts tables bond actual date columns there actually separate tables to another relation this is
called the dimension and the idea behind this is especially for like a example a warehouse of a sales information you want information broken up by year by Cora by week day um it's hard to do that with databases with a common with regular date column and have it fast you can tell my sequel post best take the state column and give me the weekday out in group by that but has been done on the fly indicated doesn't use the standard index of these to slap it on the date column you can make to standardize indexes for that but again those crystal has to type that post as my Mexico had to calculate those values on the fly instead you have a separate table with a role for every day that new effectively care about so in case of Moby it's beginning Emily's existence to 15 years from now this to cover all the bases and instead of having a date column on support tickets we have together created at ID that links with the dimension and so we can do do then is they give me all the support tickets but broken down by quarter it's so we do is we join against the dimensions Table grew by the water column that's the label and now we can easily report on that this also allows you to since each row in the D dimension already has the various parts day broken down you that we have a very complex hierarchy ICZM go up and down the data as you see fit so record can do all that right what
what lies Tony up here with this free ticket to real strong of what it is true that Active record does have does provide all the information needed to actually construct or it can do a joint can do a group you can ask it for all of the of the reflect on all the relations you ask for all the attributes on the on the model and you can select out very specific columns using the pluck method however it does have some limitations so there is really no good way to group by the non aggregate columns programmatically about mainly PrimeSense sense this is a specific gotcha for post-stressed my bicycle doesn't have this problem you can cheat but with the post grass if you have an aggregate in your select uh were about select clause in the non aggregate columns you must include those columns in the group by otherwise considers it invalid sequel because it's technically is and so you have to make sure you balance the select and the group by an active record can't really do that I'm in fact it's mostly built for the count method the maximum method the minimum method you just plug in 1 column and that is the number you get back you don't get the grouping you don't get the nice dimension label with that and is also not a good way to just have your uh models be described as in or overlapping terms I guess you have a has 1 you have has belongs to but there's no way actually say that these are dimensions you can actually is going to list all of them without iterating through every possible relation in the table plus the standard of at tributes it is no really good way to just store the cream very well yes yes yes Active Record for later does lazy loading so you can start acting on a slept um you know right the from again from where it won't execute until you actually need iterate over it but is no way to just grab something real quick and then start tacking on stuff pretty quickly so what
could we do well you can't a how hard could all queries that's great except that good luck trying to define a custom clauses in custom joins because as part of the requirements we had we could build a career um ourselves which is actually will be into doing that however for commonly I would think you normal rails developer would just start tacking on extra tremendous this to Active Record to say New give me all the dimensions in effect dirty up the entire class at that point which we really don't want I or could switch to a sequel there is a that's a that's a great gym it's good replacement for Active Record on is a much better way to build and define the very complex queries on the fly compared Active Record however that ship has sailed quite a long time ago and I don't think management was really up for us to rewrite the entire act so we had to do another way and so what we did is we defined our own library for recording why did was recently I extracted out most of the non Moby logic as some sort of clean room and a lot of this stuff and implement implemented in a um uh open-source gym I call active reporting his right I'm terrible at naming but they see this provides a DSL like system so you can tell you at theory stuff in or overlap in terms of the very lightweight DSL and where does it uses active record in asks Active Record 4 bits of information about the database about all the tables tells it how to build the query for you and it is executed directly on the database instead after record of objects coming back you just get an array of hashes at that point very simple light weight and small data set back with the information that you actually want acts in does really dirty up Active Record too much I think that's 1 method may be too at this point and the I would say it's mostly production-ready of video games gone way asked me to build a dam after but um 0 . 1 . 1 is out of DSLs pretty much in a good spot but documentation is pretty much what I need at this point but this is effectively effectively have works for every model you have in your app you have a fact model to go with it if you wanted to be reported on effectively I'm calling this effect model instead of fact table because when modeling and how it's used within an hour laughter because roses convention over configuration the idea is you have your Active Record model name back knowledge entire class in all just node link to the proper model and there's obvious awake obviously we overwrite if you're so inclined the idea is all reporting stuff pitch shoved into these classes and not your regular class models at that point so the fact model q then define the dimensions that you want to work with now why we white listing all the stuff instead of saying a active wrecker model can be all of your relations in answer has 1 or belongs to we convention by anything it's Adam uh anything it's an attribute that we could probably grew by was to use that well what if we want to user input from a user interface where we can change the charts and graphs on the fly instead of a movie I want all my lines approved by carrier I want them instead grouped by Curia account and they will have a drop down saying I want to change this report altogether change the dimension so we can do then is have each fact now you can ask at 4 dimensions it can work with and the GM knows have if it needs to join against another table because relation or if it's enough actually just provide by that DOS define the hierarchy in the actual default dimension label so if a dimension is a relation the gym will assume that the default label will be a name so line joins carrier carrier table has a name we use as the label or can override that if we see fit and then we can also define the hierarchy which effects of effectively makes more dimensions and so we can have a nice line graph of waters over time I wanna see by date now I wanna buy months now I wanna by year I 1 by quarter to slices the hierarchy to fill up until down the data as needed imaging filters again these are just where and the fact model can then white list stuff that you can filter by and again why we whitelisting this stuff because this can be possible user input and scopes on a ActiveRecord model or just glorified fast methods but also a class method delete all and destroy all so we don't want to just blindly allowed any input being coming in from of form to call methods that are not really safe so instead we white list on effect models when a user or whoever's building report actually filter stuff by and this can be done by just listing out pre-built scopes from the model so just white list those you can define your own dimension filter using the same scope of DSL suffering in Orlando within in but if you're so inclined on the slide you do not have to tack on all your nose filters to model if you don't use them and rest the applicant throw them just all reporting so that's a models slimmer or if you have to have the ransac Jim loaded up you can white lists various ransac calls as well I the other benefit of to specifying dimension to was met dimension filters manually is now you have effectively full control or mostly full control over what the where clause is will be in the report on actor record is always the smartest in building optimal sequel on the fly so if you can control that to maybe force using specific indexes or you know maybe foresee union instead of that in a war we can do that so that's the set up here is
actually is the actual execution of the gym has a concept of a metric again metric is the question you wanna answer the build a metric by giving it a name as the 1st argument you tell the fact model you want to the read the metric to be based off of then you can pass in dimensions filters you can set the aggregated defaults to some you can set the measure of the actual column that you want to sum max-min on it defaults to value and the override that as well but this builds an object that holds the question in all the information that it needs to reach out to the fact models to then reach out to Active Record to get all the information and build the corre that you actually wanna run and then finally you
shove it into a report object report is effectively just a glorified career that takes the metric and says Build the sequel then ActiveRecordBase up connection that execute sequel go yea here's are very basic results that no where the separate objects well again as I mention a previous slide the metric can be a very simple question 1 answer and then attack on more stuff the active reporting object will allow you to take a metric and then merged in user input from the interface to say I want attack on you know the Curia dimension or no I wanna change it to something else so here's my form of all my filters for these reports take that headache that show that in there will go through the white list apply the where clause dynamically that part this the power of our lap again because you can define a where clause you can define primarch anything on the fly as long as it will result in proper sequel in get data back on it FIL we build
those 2 objects and if the resulting sequel you have the select clause is very specific to what you want we or something on the total charters column and the general well give you whatever the metric name is as the aggregate is result column so we are dimensioning Uncaria so we are going to do that then grabbed a carrier a label which is the name of the gender has a nice city that in turn off waiting at the identifier back so if you wanna sh build filters on the fly in bed a i'd the identifier column of the dimension any pi graphic but the pie graph and then your filters magically update to have sales compressed potential clients that which they never use the feature later anyone but this anyway we build us the clause from the defect stable we then have to join on the bit on our dimension we apply our dimension filter or where clause and then we finally do the group by because were impose press and we have to be valid worry and in result for that
recall that run on it and we get back in array of simple hashes them viniculture sign on it or whatever we decisively or the sperm another service objectivity so if groups so 1 2 and then spit out a pretty chart a table a large number or whatever you wanna do as effectively all the gym does because again reporting is about getting a table back of rows we just went back aggregates of in actual information that we care about and so finally and disarm Pro Tips in general for the databases you want to do reporting on them or any form of way of getting information out and as mentioned before try to avoid double jumps as much as possible the queries and sometimes the normalizing is a valid solution but it's much easier for Moby to ask me all my active lines by Curia because carrier ideas directly on the table we don't need to do a double jump that point and we just keep is keep the care accounting care in sync from very simple and and after recall backlog meaning just use a database trigger of your so inclined and you can also cheat around some has many is by implementing camera captures both the built-in camera cache plugin or the or just mainly generated um pre-built counts through background jobs or whatever processes you want that we have some data pre-built increase set up for you too can easily aggregate against aggregator against that and also index wisely if you miss to the previous talk about some database optimizations with indexes for um before this look that up it was a pretty informative about when to index when not to indexing got isn't that and the common rule is is going to dimension by something at the foreign key miserly index that will probably help on if in indexing but if you have common filters that can be filtering by a lot like I said you can white the white list the filters that you allow users actually filter by you use that to determine and colleague need indexes columns or these groups of columns In use explain analyzes um as much as possible on the score is taking 50 seconds wider taking 50 seconds well we have tools that are database provides a tells you exactly what the database is doing in 0 I missed an index note suddenly half a 2nd you so use the tools they need to optimize queries because this is still sequel it's still regular database all ordering is dynamically building area of according to run also as you grow any star to outgrowth you you go from a small atom medium at large at but look into read-only replication slaves databases anything importing related haven't had the read-only because you're not doing rights in your master can take the day-to-day operations at that point often post-stressed looking to shorting even schema separation if you're multi-tenant after that way you have physically less data for the database to work with per client so you only have you only have so Cory's vagina freer biggest clients and rest the clients smaller there would have to take it it invokes optimizing that 1 and 1 client as opposed to having to take a bunch of unhappy users at that point so that's about all rambling I have I gyms on get have been really some RubyGems as well copy the slides if you're so inclined I get have Griebel called show and tell it's work with all that talks I've been doing so I don't Twitter much I follow people but if you want to I'm on twitter and questions comments hate mail death threats anybody thank you we generally thank you
harsh and what you were the
Softwareentwickler
Datensatz
Datenmanagement
Verkehrsinformation
Minimierung
Datenmanagement
Softwareentwickler
Computeranimation
Call Center
Bit
Punkt
Freier Ladungsträger
Systemverwaltung
Stab
Systemverwaltung
Datenmanagement
Gebäude <Mathematik>
Quellcode
Ungerichteter Graph
Systemaufruf
Computeranimation
Reihe
Client
Client
Freier Ladungsträger
Wort <Informatik>
Information
Ordnung <Mathematik>
Stab
Resultante
Systemverwaltung
Gruppenkeim
Datenmanagement
Fortsetzung <Mathematik>
Benutzerfreundlichkeit
Analytische Menge
Computerunterstütztes Verfahren
Information
ROM <Informatik>
Framework <Informatik>
Physikalische Theorie
Computeranimation
Übergang
Datensatz
Datenverarbeitungssystem
Verkehrsinformation
Hash-Algorithmus
Mobiles Internet
Array <Informatik>
App <Programm>
Relationale Datenbank
Datenhaltung
Systemaufruf
Physikalisches System
Frequenz
Biprodukt
Gerade
Objekt <Kategorie>
Array <Informatik>
Festspeicher
Generizität
Client
Information
Stab
Relationale Datenbank
Maschinenschreiben
Prozess <Physik>
Data-Warehouse-Konzept
Program Slicing
Fortsetzung <Mathematik>
Analytische Menge
Term
Rechenbuch
Computeranimation
Datenhaltung
Bildschirmmaske
Hausdorff-Dimension
Standardabweichung
Mittelwert
Gerade
Tabelle <Informatik>
Prozess <Informatik>
Datenhaltung
Linienelement
Relativitätstheorie
Datenmodell
Stellenring
Gasströmung
Digitalfilter
Biprodukt
Dienst <Informatik>
Hierarchische Struktur
Funktion <Mathematik>
Festspeicher
Basisvektor
Dimensionsanalyse
Würfel
Analytische Menge
Messprozess
Binäre Relation
Information
Normalvektor
Unternehmensarchitektur
Standardabweichung
Punkt
Hausdorff-Dimension
Program Slicing
Gruppenkeim
Fortsetzung <Mathematik>
Information
Computeranimation
Informationsmodellierung
Hausdorff-Dimension
Datentyp
Freier Ladungsträger
Gerade
Zustandsmaschine
Tabelle <Informatik>
Freier Ladungsträger
Datenhaltung
Standardmodell <Elementarteilchenphysik>
Relativitätstheorie
Datenmodell
Teilbarkeit
Gerade
Dienst <Informatik>
Gruppenkeim
Client
Attributierte Grammatik
Verbandstheorie
Wort <Informatik>
Binäre Relation
Information
Schlüsselverwaltung
Tabelle <Informatik>
Resultante
Hausdorff-Dimension
Program Slicing
Gruppenkeim
Hierarchische Struktur
Fortsetzung <Mathematik>
Information
Term
Kreisdiagramm
Computeranimation
Übergang
Datensatz
Hausdorff-Dimension
Verkehrsinformation
Kommandosprache
Netzbetriebssystem
Produkt <Mathematik>
Datenstruktur
Drahtloses lokales Netz
Gerade
Umwandlungsenthalpie
Filter <Stochastik>
Freier Ladungsträger
Physikalischer Effekt
Datenmodell
Digitalfilter
Kontextbezogenes System
Hierarchische Struktur
Verbandstheorie
Würfel
Dimensionsanalyse
Attributierte Grammatik
Binäre Relation
Information
Drahtloses lokales Netz
Ordnung <Mathematik>
Term
Tabelle <Informatik>
Standardabweichung
Resultante
Retrievalsprache
Lineares Funktional
Total <Mathematik>
Gewichtete Summe
Linienelement
Wasserdampftafel
Datenhaltung
Linienelement
Ausnahmebehandlung
Fortsetzung <Mathematik>
Frequenz
Extrempunkt
Zählen
Term
Computeranimation
Datensatz
Einheit <Mathematik>
Mittelwert
Zahlenbereich
Total <Mathematik>
Client
Attributierte Grammatik
Messprozess
Transaktionsverwaltung
Einflussgröße
Retrievalsprache
Gewichtete Summe
Hausdorff-Dimension
Fortsetzung <Mathematik>
Äquivalenzklasse
Code
Computeranimation
Übergang
Informationsmodellierung
Hausdorff-Dimension
Mobiles Internet
Konfigurationsraum
Einflussgröße
Modallogik
Gleitkommarechnung
Filter <Stochastik>
Benutzeroberfläche
Linienelement
Mobiles Internet
Linienelement
Datenmodell
Digitalfilter
Frequenz
Frequenz
Gruppenkeim
Mereologie
Client
Attributierte Grammatik
Messprozess
Kantenfärbung
Binäre Relation
Tabelle <Informatik>
Resultante
Konfiguration <Informatik>
Punkt
Hausdorff-Dimension
Zahlenbereich
Fortsetzung <Mathematik>
Computeranimation
Informationsmodellierung
Datensatz
Wechselsprung
Freier Ladungsträger
Gerade
Schreib-Lese-Kopf
Soundverarbeitung
Data-Warehouse-Konzept
Sichtenkonzept
Freier Ladungsträger
Schlüsselverwaltung
Datenhaltung
Relativitätstheorie
Abfrage
Arithmetisches Mittel
Dienst <Informatik>
Dimensionsanalyse
Binäre Relation
Entwurfsmuster
Axiom
Standardabweichung
Tabelle <Informatik>
Retrievalsprache
Kontrollstruktur
Extrempunkt
Hausdorff-Dimension
Gruppenkeim
Zahlenbereich
Hierarchische Struktur
Fortsetzung <Mathematik>
Extrempunkt
Information
Zählen
Term
Komplex <Algebra>
Computeranimation
Datensatz
Informationsmodellierung
Regulärer Graph
Existenzsatz
Datentyp
Stützpunkt <Mathematik>
Inverser Limes
Attributierte Grammatik
Datenhaltung
Linienelement
Relativitätstheorie
Abelsche Kategorie
Indexberechnung
Gruppenkeim
Funktion <Mathematik>
Automatische Indexierung
Mereologie
Dimensionsanalyse
GRASS <Programm>
Information
Term
Tabelle <Informatik>
Aggregatzustand
Standardabweichung
Retrievalsprache
Bit
Konfiguration <Informatik>
Punkt
Fortsetzung <Mathematik>
Kartesische Koordinaten
Ungerichteter Graph
Fortsetzung <Mathematik>
Computeranimation
Hausdorff-Dimension
Datenmanagement
Regulärer Graph
Freier Ladungsträger
Tropfen
Default
Einflussgröße
Gerade
Funktion <Mathematik>
Parametersystem
App <Programm>
Filter <Stochastik>
Korrelation
Freier Ladungsträger
Datenhaltung
Güte der Anpassung
Abfrage
Digitalfilter
Ein-Ausgabe
Rechenschieber
Hierarchische Struktur
Gruppenkeim
Automatische Indexierung
Messprozess
Information
Tabelle <Informatik>
Gewicht <Mathematik>
Wasserdampftafel
Hausdorff-Dimension
Klasse <Mathematik>
Hierarchische Struktur
Mathematische Logik
Term
Physikalische Theorie
Datenhaltung
Datensatz
Informationsmodellierung
Bildschirmmaske
Computerspiel
Hash-Algorithmus
Programmbibliothek
Softwareentwickler
Konfigurationsraum
Ganze Funktion
Bildgebendes Verfahren
Attributierte Grammatik
Soundverarbeitung
Benutzeroberfläche
Graph
Open Source
Linienelement
Default
Relativitätstheorie
Datenmodell
Physikalisches System
Binder <Informatik>
Gerade
Quick-Sort
Objekt <Kategorie>
Mereologie
Dimensionsanalyse
Gamecontroller
Binäre Relation
Modelltheorie
Eigentliche Abbildung
Normalvektor
Resultante
Stabilitätstheorie <Logik>
Bit
Total <Mathematik>
Hausdorff-Dimension
Fortsetzung <Mathematik>
Gebäude <Mathematik>
Kreisdiagramm
Computeranimation
Bildschirmmaske
Client
Hausdorff-Dimension
Freier Ladungsträger
Leistung <Physik>
Schnittstelle
Einfach zusammenhängender Raum
Filter <Stochastik>
Linienelement
Freier Ladungsträger
Linienelement
Validität
Ein-Ausgabe
Rechenschieber
Objekt <Kategorie>
Gruppenkeim
Geschlecht <Mathematik>
Ein-Ausgabe
Mereologie
Dimensionsanalyse
Identifizierbarkeit
Eigentliche Abbildung
Retrievalsprache
Prozess <Physik>
Punkt
Minimierung
Gruppenkeim
Gewichtete Summe
Fortsetzung <Mathematik>
Twitter <Softwareplattform>
Zählen
Synchronisierung
Computeranimation
Wechselsprung
Client
Vorzeichen <Mathematik>
Datenreplikation
Total <Mathematik>
Rechenschieber
Freier Ladungsträger
Vorlesung/Konferenz
E-Mail
Gerade
Caching
Filter <Stochastik>
Freier Ladungsträger
Schlüsselverwaltung
Datenhaltung
Abfrage
Globale Optimierung
Motion Capturing
Dienst <Informatik>
Twitter <Softwareplattform>
Gruppenkeim
Wechselsprung
Automatische Indexierung
Rechter Winkel
Lesen <Datenverarbeitung>
Information
Tabelle <Informatik>
Hausdorff-Dimension
Ablöseblase
Zahlenbereich
Datenhaltung
Bildschirmmaske
Datensatz
Verkehrsinformation
Tabelle <Informatik>
Zwei
Validität
Indexberechnung
Schlussregel
Plug in
Objekt <Kategorie>
Sehne <Geometrie>
Flächeninhalt
Caching
ROM <Informatik>
Dimensionsanalyse
Verbandstheorie

Metadaten

Formale Metadaten

Titel Reporting on Rails - ActiveRecord and ROLAP Working Together
Serientitel RailsConf 2017
Teil 64
Anzahl der Teile 86
Autor Drake, Tony
Lizenz CC-Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported:
Sie dürfen das Werk bzw. den Inhalt zu jedem legalen und nicht-kommerziellen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen und das Werk bzw. diesen Inhalt auch in veränderter Form nur unter den Bedingungen dieser Lizenz weitergeben.
DOI 10.5446/31282
Herausgeber Confreaks, LLC
Erscheinungsjahr 2017
Sprache Englisch

Inhaltliche Metadaten

Fachgebiet Informatik
Abstract It'll happen eventually. Someone will come down with a feature request for your app to "create dashboards and reporting on our data". So how do you go about doing it? What parts of your database should you start thinking about differently? What is "reporting" anyway? Is ActiveRecord enough to pull this off? Let's go on a journey through the world of Relational Online Analytical Processing (ROLAP) and see how this can apply to Rails. We'll also look at database considerations and finish with looking at a light DSL that works with ActiveRecord to help make your data dance.

Ähnliche Filme

Loading...