Skip to content
Snippets Groups Projects
Commit b01ca553 authored by Cam Saül's avatar Cam Saül
Browse files

Merge branch 'master' of github.com:metabase/metabase

parents 99752ce1 af9dee1c
No related branches found
No related tags found
No related merge requests found
......@@ -2,17 +2,12 @@
# Overview
Metabase Report server is an easy way to generate charts and dashboards, ask simple ad hoc queries without using SQL, and see detailed information about rows in your Database. You can set it up in under 5 minutes, and then give yourself and others a place to ask simple questions and understand the data your application is generating. It is not tied to any specific framework and can be used out of the box with minimal configuration.
Metabase is an easy way to generate charts and dashboards, ask simple ad hoc queries without using SQL, and see detailed information about rows in your Database. You can set it up in under 5 minutes, and then give yourself and others a place to ask simple questions and understand the data your application is generating. It is not tied to any specific framework and can be used out of the box with minimal configuration.
With a bit of tagging and annotation of what the tables and fields in your database mean, it can be used to provide a rich, humanized version analytics server and administration interface.
# What it isn't
For more information check out [www.metabase.com](http://www.metabase.com)
The Report Server does not deal with getting data into a database or data warehouse or with transforming your data into a representation that lets you answer specific questions. Most sophisticated installations will have separate Ingestion processes that get data from third parties, event collectors or database snapshots into a Data Warehouse as well as Transformation Processes that join, denormalize, enrich or otherwise get your data into a shape that more convenient for use in analytics.
The report server does not collect web page views or mobile events, though it can help you understand conversion funnels, cohort retention and use behavior in general once you have collected these events into a database.
See the [Data Warehouse Guide](docs/data-warehousing.md) for more information and advice.
# Security Disclosure
......@@ -20,7 +15,18 @@ Security is very important to us. If discover any issue regarding security, plea
# Installation
To run the Report server you will need to have a Java Runtime installed. As a quick check to see if you system already has one, try
You can run Metabase in two primary ways, as a docker container or as a jar.
## Docker
To run Metabase via Docker, just type
docker run -d -p 3000:3000 —name metabase metabase/metabase:v0.12.0
## JVM Jar
To run the jar you will need to have a Java Runtime installed. As a quick check to see if you system already has one, try
java -version
......@@ -32,7 +38,7 @@ If you see something like
you are good to go. Otherwise, download the Java Runtime Environment at http://java.com/
To install the Query Server, go to the [Metabase Download Page](http://www.metabase.com/download) and download the current build. Place the downloaded jar into a newly created directory (as it will create some files when it is run), and run it on the command line:
Go to the [Metabase Download Page](http://www.metabase.com/download) and download the current build. Place the downloaded jar into a newly created directory (as it will create some files when it is run), and run it on the command line:
java -jar metabase.jar
......@@ -41,11 +47,8 @@ Now, open a browser and go to `http://localhost:3000` , and you will be asked a
Once you have added this connection, you will be taken into the app and you'll be ready to ask your first question.
For more information, troubleshooting as well as tips on how to run Metabase in production, check out the [Installation Guide](docs/installation-guide.md)
# Getting Started
For a more detailed walkthrough, check out our [Getting Started](docs/getting-started/start.md) guide.
Follow our [Getting Started](docs/getting-started.md) guide to learn how to use the Report Server.
# Contributing
......
......@@ -60,22 +60,3 @@ While we will closely follow reported issues and feature requests, we aim to mak
### Visitor Custom Variables
| Name | Value | Why we collect this |
| ---- | ----- | ------------------- |
| User newb score | # sql queries written | To understand if “bad” conditions (such as users starting queries but not executing them) are due to novice users |
| User newb score |# non-sql queries written |To understand if “bad” conditions (such as users starting queries but not executing them) are due to novice users|
| User newb score | total queries written | To understand if “bad” conditions (such as users starting queries but not executing them) are due to novice users|
| Instance newb score |# databases |To understand how many databases are typically used by our users. If we see that a typical installation has many databases, we will prioritize |
| Instance newb score | # admins | To know if we should provide tools that allow a group of admins to collaboratively annotate data, manage connections, or we can ignore these features. |
| Instance newb score | # active users |To understand if problems or active usage correlate with how many users are using the instance. Are there issues that compound as more users are asking questions and creating dashboards?|
| Instance newb score |# dashboards| How many dashboards do our instances typically have? Should we optimize our interface for companies with a few core dashboards or many special use dashboards?|
| Instance newb score |# saved sql questions | To understand how much our user base depends on raw SQL questions vs using our query language. This determines how much we emphasis on tools for writing SQL vs improving the query lanauge.|
| Instance newb score |# saved non-sql questions | To understand how much our user base depends on raw SQL questions vs using our query language. This determines how much we emphasis on tools for writing SQL vs improving the query lanauge.|
| Instance newb score |% tables annotated |To understand if certain “bad” conditions (such as users starting queries but not executing them) are linked to whether there is enough metadata added by the instance administrators|
| Instance newb score |% fields annotated |To understand if certain “bad” conditions (such as users starting queries but not executing them) are linked to whether there is enough metadata added by the instance administrators |
File deleted
......@@ -162,7 +162,7 @@ export default class QueryVisualization extends Component {
if (!this.props.result) {
viz = (
<div className="flex full layout-centered text-grey-1">
<h1>If you give me some data I can show you something cool. Run a Query!</h1>
<h1>If you're stuck, you can always just pick a table and hit "Run Query" to get started.</h1>
</div>
);
} else {
......
......@@ -47,17 +47,26 @@
(defn- flatten-collect-fields [form]
(let [fields (transient [])]
(clojure.walk/prewalk (fn [f]
(if-not (= (type f) metabase.driver.query_processor.interface.Field) f
(do
(conj! fields f)
;; HACK !!!
;; Nested Mongo fields come back inside of their parent when you specify them in the fields clause
;; e.g. (Q fields venue...name) will return rows like {:venue {:name "Kyle's Low-Carb Grill"}}
;; Until we fix this the right way we'll just include the parent Field in the :query-fields list so the pattern
;; matching works correctly.
;; (This hack was part of the old annotation code too, it just sticks out better because it's no longer hidden amongst the others)
(when (:parent f)
(conj! fields (:parent f))))))
(cond
(= (type f) metabase.driver.query_processor.interface.Field)
(do
(conj! fields f)
;; HACK !!!
;; Nested Mongo fields come back inside of their parent when you specify them in the fields clause
;; e.g. (Q fields venue...name) will return rows like {:venue {:name "Kyle's Low-Carb Grill"}}
;; Until we fix this the right way we'll just include the parent Field in the :query-fields list so the pattern
;; matching works correctly.
;; (This hack was part of the old annotation code too, it just sticks out better because it's no longer hidden amongst the others)
(when (:parent f)
(conj! fields (:parent f))))
;; For a DateTimeField we'll flatten it back into regular Field but include the :unit info for the frontend
;; Recurse so this fn will handle the resulting Field normally
(= (type f) metabase.driver.query_processor.interface.DateTimeField)
(recur (assoc (:field f)
:unit (:unit f)))
:else f))
form)
(->> (persistent! fields)
distinct
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment