amitdusane.com Adobe Analytics Learning

Analyze the dataData Warehouse

Delivery Options

A finance team gets a monthly export by email. It works for a year. Then the business grows, the file passes the size the mail server will accept, and the email stops arriving. Nobody notices for six weeks, because a report that does not arrive looks exactly like a quiet month.

Delivery is the half of a Data Warehouse request that people configure quickly and then never think about again. It is also the half that decides whether the thing keeps working when you are not watching.

Five destinations, and email is not one of the good ones

Adobe recommends five destinations: Amazon S3, Google Cloud Platform, Azure RBAC, Azure SAS, and email. The older FTP and SFTP options still exist and are no longer recommended.

Cloud storage is the right answer for anything that runs on a schedule or feeds another system. S3 needs a bucket name, an access key ID and a secret key. Azure Blob needs a container, an account and a key. Google Cloud is configured the same way. Once set up, the file lands somewhere a pipeline can pick it up without a human in the loop.

Email is right for one thing: a file a person is going to open. A one-off test, a small extract somebody asked for once, a sanity check on a new request. It is the fastest way to see whether you built the table correctly.

Email is wrong for everything else, and the failure at the top of this section is the reason. Mail systems have size limits you do not control, they are not designed to be a data transport, and the failure mode is silence. A pipeline built on email works until the volume grows.

DestinationUse it forWhat it needs
Amazon S3Anything scheduled or automatedBucket name, access key ID, secret key
Google Cloud PlatformSame, where the estate is on GoogleBucket and credentials
Azure RBAC / Azure SASSame, where the estate is on AzureContainer, account, key
EmailTests, one-offs, small files a person opensAn address, and a file under the mail limit
FTP / SFTPExisting pipelines only. Not recommended for new work.Host, username, password

It is worth knowing why FTP fell out of favour, because the reason is also what you gain by moving off it.

The first part is the obvious one. Plain FTP sends everything unencrypted, including the username and password, so anyone positioned between the two ends can read the file and help themselves to the credentials. That alone settles it.

The second part matters more day to day, and it is about ownership. An FTP site is a shared folder with one set of credentials. Whoever holds them can read everything in it, write anything, and delete anything, and there is no way to say that one system may read while another may only write. Everyone gets the same door key.

Cloud storage turns that around. The bucket belongs to you and sits inside your own security model, so you grant specific permissions to specific identities: this pipeline may read, that process may write, nobody may delete. You also inherit the encryption, logging and key rotation your organisation already runs everywhere else, rather than maintaining a password on a server somebody set up years ago.

So moving off FTP is not really a protocol upgrade. It moves the destination inside your own perimeter, where your existing controls already apply.

Report options are small settings with large effects

The Report options tab looks like formatting preferences. Three of them decide whether an automated process can use the file at all.

File name, and appending the date range. A scheduled request writes to the same destination every time. If every delivery has the same name, each one overwrites the last, and you have one file instead of a history. Switching on the option to append the report date range gives you names like the report period, so files accumulate in order and a pipeline can pick up the newest by name.

The manifest file. This is a small companion file listing the file name, its size, and the number of records. It is delivered last, after the data itself. That ordering is the point: if the manifest is there, the transfer finished. Without it, a process reading the bucket has no reliable way to know whether it is looking at a complete file or one still being written.

The manifest arrives last, which is what makes it useful
request runs file appears still writing read here: partial day file complete manifest read here: complete Trigger on the manifest, not on the data file.

Send an empty file when there is no data. Off by default, and worth switching on for anything automated. A day with no matching data produces nothing at all, and a pipeline cannot tell the difference between no data and no delivery. An empty file with the right name says the request ran and found nothing, which is a real answer.

The remaining options matter less but are worth knowing. Files are delivered as CSV or as a Tableau extract. Data Warehouse compresses anything over 1 MB automatically, and you can force compression for everything. A digital signature file lets a recipient verify the file has not been altered. You can add comment lines at the top of the file, which is helpful for humans and a nuisance for parsers, so leave it off for anything automated.

Manifest on, empty file on, date in the name. Every scheduled request.

These three settings are the difference between a pipeline that fails loudly and one that fails silently, and all three are one click each. The date in the file name stops deliveries overwriting each other. The manifest tells the receiving process the file is complete. The empty file distinguishes a quiet day from a broken request. None of them helps anybody reading a file by hand, which is exactly why they get skipped, and the skipping only shows up months later when somebody asks why the numbers stopped.

Scheduling, and the setting you cannot change later

A request either runs once or runs on a schedule, and the choice has a consequence beyond convenience.

A scheduled request can be opened and edited afterwards. A one-off request cannot. If you build a one-off and get a dimension wrong, your only option is to build the whole request again. That is why experienced users schedule almost everything, including requests they expect to run a single time, and simply stop the schedule afterwards.

When you do schedule, match the frequency to the decision the file feeds, not to how often the data changes. Data changes constantly. A monthly finance reconciliation needs a monthly file. Sending it weekly means four times the files, four times the storage, and no extra information for the person receiving it.

Also give the schedule a start date that is far enough ahead to be sure the first run is right. A daily request that starts tomorrow gives you one night to discover a mistake.

Two things about scheduling are not obvious from the form, and both stop you saving a request rather than warning you afterwards.

The first is that the date range and the schedule are coupled. Pick a custom date range on the General settings tab and the scheduling options switch off. That is deliberate rather than a fault: a scheduled request needs a rolling period such as Last month, because a fixed set of dates would deliver the same data every time it ran. If you want a schedule, pick one of the presets.

The second is that a notification address is not optional once you deliver anywhere other than email. Choose cloud storage and leave the notification field empty and the request will not save. It is worth treating as a feature rather than an obstacle, because a file going to a bucket has nobody watching it, which is exactly when somebody needs to hear that a run failed.

Up to 72 hours is a real number, not a worst case somebody invented

Adobe states that a request can take up to 72 hours to process, and complexity and volume both push it towards that end. Most requests are far quicker, which is precisely the trap: people build a mental model from a small test that returned in ten minutes and then promise a stakeholder a quarterly export by the end of the day. Build the delay into whatever you commit to, and if a request is genuinely urgent, ask whether a narrower version answers the question well enough today. A scheduled request that has been running for a month has already solved this problem, which is another argument for scheduling early rather than requesting on demand.

Follow along: set up a delivery that survives you

This turns a Data Warehouse request into something that runs on its own and can be picked up by another system. If you do not have cloud storage credentials to hand, do the first part and read the second.

Do this A scheduled request, delivered where a pipeline can find it
  1. Part one, the options that make it usable
  2. Open your request and go to Report options. Set a file name that describes the contents, and switch on Append report date range to file name. Each delivery now has its own name. Without this, every run overwrites the one before.
  3. Switch on Send a manifest file and Send an empty file when there is no data. The manifest arrives last and confirms the transfer completed. The empty file proves the request ran on a quiet day.
  4. Leave Beginning of report comments empty for anything automated. Comment lines sit above the header row and break a lot of parsers.
  5. Part two, the destination
  6. Go to Report destination and choose your cloud storage provider rather than email. S3 wants a bucket, an access key ID and a secret key. Azure wants a container, account and key.
  7. On Scheduling options, set a repeating schedule matched to the decision the file feeds, and set the start date at least a few days out. Scheduling also keeps the request editable, which a one-off never is.
  8. On Notification email, use a shared inbox or a distribution list. Failure notices sent to one person stop being read the week that person changes role.
  9. Part three, prove it
  10. Wait for the first delivery and check three things: the file name carries its date range, the manifest arrived, and the record count in the manifest matches the rows in the file. If those three hold, the pipeline can be trusted to a machine.

There is nothing else to set up. Destination, three report options, a schedule and a shared notification address. Everything past this is deciding whether a Data Warehouse request was the right tool at all.

The three switches that keep a pipeline honest
The Report options tab of a Data Warehouse request. A File name field reads Report. Append report date range to file name is switched on. Report format offers CSV, selected, or Tableau TDE, and Send report as compressed file is off. Under Report contents, Return all rows is on and the report comments box is empty. Under Additional options, Sort by metrics is off, Send a manifest file is on, Send a digital signature file is off, and Send an empty file when there is no data is on. The report suite selector on the left is blurred out.
Three of these toggles decide whether a machine can use the delivery: append the date range, send a manifest, send an empty file. They sit among formatting options that look equally important and are not, which is exactly why they get skipped. Note the comments box left empty, which is right for anything automated.

A file nobody collects is not a report

Cloud storage for anything scheduled, email only for tests and small extracts a person will open by hand. The older FTP options work and should not be chosen for new pipelines.

Three options in the formatting tab do most of the work of making a delivery reliable. Put the date range in the file name so deliveries do not overwrite each other. Send the manifest so a receiving process knows the transfer finished. Send an empty file so a quiet day cannot be mistaken for a broken request.

Schedule rather than run once, because scheduled requests stay editable and one-offs never do. Match the frequency to the decision, not to the data. Send failure notices to a shared inbox. And plan for up to 72 hours, because the small test that came back in ten minutes is not the guide.

All of which assumes the request should exist. Data Warehouse is slow, rigid, and refuses calculated metrics, so a good part of the skill is knowing when to reach for it and when the answer is somewhere else entirely. Best Practices and Use Cases covers what it is genuinely good at, the requests that should never have been exports, and how it differs from the other export in this phase.

Where to find it in Adobe Analytics

Analytics > Tools > Data Warehouse, then open a request. Report destination, Report options, Scheduling options and Notification email are the last four tabs of the form.

Cloud storage credentials are entered on the destination tab and are stored with the request. Changing a key later means opening every request that uses it, so it is worth recording which requests point at which bucket.

Need implementation steps?

This article focuses on the concepts, architecture, and practical guidance behind the topic. For the latest UI walkthroughs and step-by-step implementation instructions, use the links below. They leave this site and open Adobe's own documentation in a new tab.