Joi.object().keys({
title: Joi.string(),
description: Joi.string(),
measures: Joi.func(),
dimensions: Joi.func(),
segments: Joi.func(),
order: Joi.array().items(Joi.object().keys({
member: Joi.func().required(),
direction: Joi.any().valid('asc', 'desc').required()
})),
filters: Joi.array().items(Joi.object().keys({
member: Joi.func().required(),
operator: Joi.any().valid('contains', 'notContains', 'equals', 'set', 'notSet', 'gt', 'gte', 'lt', 'lte'),
params: Joi.array().items(Joi.string().allow('').optional())
})),
timeDimension: Joi.object().keys({
dimension: Joi.func().required(),
dateRange: Joi.string().required(),
granularity: Joi.any().valid('hour', 'day', 'week', 'month', 'year', null)