[{"data":1,"prerenderedAt":367},["ShallowReactive",2],{"navigation":3,"page-\u002Fcreating-datasets\u002Fbuild-the-same-dataset-with-a-recipe":130,"\u002Fcreating-datasets\u002Fbuild-the-same-dataset-with-a-recipe-surround":361,"comments-\u002Fcreating-datasets\u002Fbuild-the-same-dataset-with-a-recipe":366},[4],{"title":5,"path":6,"stem":7,"children":8,"page":129},"En","\u002Fen","en",[9,53,87],{"title":10,"path":11,"stem":12,"children":13,"icon":52},"CRM Analytics Foundations","\u002Fen\u002Ffoundations","en\u002F1.foundations\u002F1.index",[14,16,20,24,28,32,36,40,44,48],{"title":15,"path":11,"stem":12},"Welcome & Dev Org",{"title":17,"path":18,"stem":19},"Graded Quiz","\u002Fen\u002Ffoundations\u002Fquiz","en\u002F1.foundations\u002F10.quiz",{"title":21,"path":22,"stem":23},"What Is CRM Analytics?","\u002Fen\u002Ffoundations\u002Fwhat-is-crm-analytics","en\u002F1.foundations\u002F2.what-is-crm-analytics",{"title":25,"path":26,"stem":27},"Architecture","\u002Fen\u002Ffoundations\u002Farchitecture-and-data-flow","en\u002F1.foundations\u002F3.architecture-and-data-flow",{"title":29,"path":30,"stem":31},"The Data Layer","\u002Fen\u002Ffoundations\u002Fthe-data-layer","en\u002F1.foundations\u002F4.the-data-layer",{"title":33,"path":34,"stem":35},"The Design Layer","\u002Fen\u002Ffoundations\u002Fthe-design-layer","en\u002F1.foundations\u002F5.the-design-layer",{"title":37,"path":38,"stem":39},"The Intelligence Layer","\u002Fen\u002Ffoundations\u002Fthe-intelligence-layer","en\u002F1.foundations\u002F6.the-intelligence-layer",{"title":41,"path":42,"stem":43},"Hands-On Tour","\u002Fen\u002Ffoundations\u002Fhands-on-tour","en\u002F1.foundations\u002F7.hands-on-tour",{"title":45,"path":46,"stem":47},"Six Adoption Steps","\u002Fen\u002Ffoundations\u002Fsix-steps-and-interview-prep","en\u002F1.foundations\u002F8.six-steps-and-interview-prep",{"title":49,"path":50,"stem":51},"Interview Questions","\u002Fen\u002Ffoundations\u002Finterview-questions","en\u002F1.foundations\u002F9.interview-questions","i-lucide-compass",{"title":54,"path":55,"stem":56,"children":57,"icon":86},"Setup & User Provisioning","\u002Fen\u002Fsetup","en\u002F2.setup\u002F1.index",[58,60,64,68,72,76,80,83],{"title":59,"path":55,"stem":56},"Provisioning Users",{"title":61,"path":62,"stem":63},"Licenses & Permissions","\u002Fen\u002Fsetup\u002Flicenses-and-permission-sets","en\u002F2.setup\u002F2.licenses-and-permission-sets",{"title":65,"path":66,"stem":67},"Integration User","\u002Fen\u002Fsetup\u002Fthe-integration-user","en\u002F2.setup\u002F3.the-integration-user",{"title":69,"path":70,"stem":71},"Security User","\u002Fen\u002Fsetup\u002Fthe-security-user","en\u002F2.setup\u002F4.the-security-user",{"title":73,"path":74,"stem":75},"Analytics Settings","\u002Fen\u002Fsetup\u002Fanalytics-settings","en\u002F2.setup\u002F5.analytics-settings",{"title":77,"path":78,"stem":79},"Hands-On Access","\u002Fen\u002Fsetup\u002Fhands-on-assigning-access","en\u002F2.setup\u002F6.hands-on-assigning-access",{"title":17,"path":81,"stem":82},"\u002Fen\u002Fsetup\u002Fquiz","en\u002F2.setup\u002F7.quiz",{"title":49,"path":84,"stem":85},"\u002Fen\u002Fsetup\u002Finterview-questions","en\u002F2.setup\u002F8.interview-questions","i-lucide-settings-2",{"title":88,"path":89,"stem":90,"children":91,"icon":128},"Creating Datasets","\u002Fen\u002Fcreating-datasets","en\u002F3.creating-datasets\u002F1.index",[92,94,97,101,105,109,113,117,121,125],{"title":93,"path":89,"stem":90},"What Is a Dataset?",{"title":17,"path":95,"stem":96},"\u002Fen\u002Fcreating-datasets\u002Fquiz","en\u002F3.creating-datasets\u002F10.quiz",{"title":98,"path":99,"stem":100},"The Data Landscape","\u002Fen\u002Fcreating-datasets\u002Fthe-data-landscape","en\u002F3.creating-datasets\u002F2.the-data-landscape",{"title":102,"path":103,"stem":104},"Upload a CSV","\u002Fen\u002Fcreating-datasets\u002Fload-data-from-csv","en\u002F3.creating-datasets\u002F3.load-data-from-csv",{"title":106,"path":107,"stem":108},"Grain, Lookups & Joins","\u002Fen\u002Fcreating-datasets\u002Fgrain-lookups-and-joins","en\u002F3.creating-datasets\u002F4.grain-lookups-and-joins",{"title":110,"path":111,"stem":112},"Dataset Builder","\u002Fen\u002Fcreating-datasets\u002Fbuild-with-dataset-builder","en\u002F3.creating-datasets\u002F5.build-with-dataset-builder",{"title":114,"path":115,"stem":116},"Run the Dataflow","\u002Fen\u002Fcreating-datasets\u002Frun-and-troubleshoot-the-dataflow","en\u002F3.creating-datasets\u002F6.run-and-troubleshoot-the-dataflow",{"title":118,"path":119,"stem":120},"Build with a Recipe","\u002Fen\u002Fcreating-datasets\u002Fbuild-the-same-dataset-with-a-recipe","en\u002F3.creating-datasets\u002F7.build-the-same-dataset-with-a-recipe",{"title":122,"path":123,"stem":124},"Combine Datasets","\u002Fen\u002Fcreating-datasets\u002Fcombine-datasets","en\u002F3.creating-datasets\u002F8.combine-datasets",{"title":49,"path":126,"stem":127},"\u002Fen\u002Fcreating-datasets\u002Finterview-questions","en\u002F3.creating-datasets\u002F9.interview-questions","i-lucide-database",false,{"id":131,"title":132,"access":133,"body":134,"description":350,"extension":351,"interview":352,"links":352,"meta":353,"navigation":354,"passScore":352,"path":119,"quiz":352,"seo":355,"stem":120,"video":356,"__hash__":360},"docs\u002Fen\u002F3.creating-datasets\u002F7.build-the-same-dataset-with-a-recipe.md","Build the Same Dataset with a Recipe","members",{"type":135,"value":136,"toc":340},"minimark",[137,141,159,164,178,196,207,218,222,229,233,256,260,263,304,308,315,318,322,328,333],[138,139,132],"h1",{"id":140},"build-the-same-dataset-with-a-recipe",[142,143,144,145,149,150,153,154,158],"p",{},"Let's build the ",[146,147,148],"strong",{},"exact same"," opportunities dataset — Opportunity + Account + User — but with a ",[146,151,152],{},"recipe"," this time. Recipes are the modern data-prep engine: drag-and-drop, visual, and far more flexible than a dataflow. The trade-off is that ",[155,156,157],"em",{},"you"," own the relationships. Dataset Builder figured out the next object and the join keys for you; in a recipe you decide what joins to what, and how.",[160,161,163],"h2",{"id":162},"start-a-new-recipe","Start a new recipe",[142,165,166,167,170,171,173,174,177],{},"From Analytics Studio, ",[146,168,169],{},"Create → Dataset"," and pick from your datasets or sync objects — this opens a ",[146,172,152],{}," in the Data Manager (Data Flows & Recipes → ",[146,175,176],{},"Recipes"," → new recipe).",[142,179,180,181,184,185,188,189,188,192,195],{},"In the recipe, ",[146,182,183],{},"Select Data"," shows everything available to you: datasets you've created, external sources, and the connected\u002Fsync objects from Salesforce. Grab the same three — ",[146,186,187],{},"Opportunity",", ",[146,190,191],{},"Account",[146,193,194],{},"User",".",[197,198,200],"tip",{"icon":199},"i-lucide-list-checks",[142,201,202,203,206],{},"First real difference from Dataset Builder: you can ",[146,204,205],{},"Select All"," fields per object instead of clicking them one by one — a huge time-saver on wide objects. But don't. If an object has 150+ fields you don't need all of them; a too-wide dataset is miserable to scroll and slower to query. Bring only what the dashboard needs.",[142,208,209,210,213,214,217],{},"Click ",[146,211,212],{},"Next"," and you land in the recipe canvas — your three objects sitting there, ",[146,215,216],{},"not connected",". That's the core difference: in a recipe, connecting them is your job.",[160,219,221],{"id":220},"join-the-objects","Join the objects",[142,223,224,225,228],{},"Grain rules still apply: ",[146,226,227],{},"Opportunity is the lowest level",", so everything joins onto it.",[230,231],"lesson-steps",{":items":232},"[{\"title\":\"Join Account onto Opportunity\",\"description\":\"Drag from the Opportunity node's plus onto Account. It becomes a Join node. The recipe correctly picks up Account ID = Account ID — verify it, then apply.\"},{\"title\":\"Join User onto Opportunity — watch the key\",\"description\":\"Add User to Opportunity (not to Account — the owner belongs to the opportunity). Here the recipe guesses wrong: it matches Opportunity ID to User ID. You want Owner ID → User ID. Fix the key by hand.\"},{\"title\":\"Apply each step\",\"description\":\"Recipes don't save as you go the way you might expect — click Apply at the bottom to commit each node before moving on.\"}]",[197,234,236],{"icon":235},"i-lucide-triangle-alert",[142,237,238,239,242,243,247,248,251,252,255],{},"This is the recipe tax, and it's worth internalizing: ",[146,240,241],{},"it auto-picks a join key, and it can pick the wrong one."," For the owner you need ",[244,245,246],"code",{},"OwnerId → User.Id",", not ",[244,249,250],{},"Opportunity.Id → User.Id",". You have to ",[155,253,254],{},"know your objects"," well enough to catch it. Dataset Builder would never have let you make this mistake — that's the safety you trade away for control.",[160,257,259],{"id":258},"control-your-columns","Control your columns",[142,261,262],{},"Recipes give you real control over the output columns:",[264,265,266,277,290],"ul",{},[267,268,269,272,273,276],"li",{},[146,270,271],{},"Join type"," — expand the join node to choose a ",[146,274,275],{},"lookup"," vs a full join. (We covered why that matters in the grain lesson; keep these as lookups here.)",[267,278,279,282,283,188,286,289],{},[146,280,281],{},"Prefixes"," — fields from Account come in as ",[244,284,285],{},"Account.Name",[244,287,288],{},"Account.Industry",", and so on. You can rename these prefixes so the final columns read the way you want.",[267,291,292,295,296,299,300,303],{},[146,293,294],{},"Keep or drop"," — preview the incoming columns and ",[146,297,298],{},"hide"," the ones you don't need so they never reach the output. Trim ",[244,301,302],{},"User."," fields down to just the owner name and photo, for instance.",[160,305,307],{"id":306},"add-the-output-node","Add the output node",[142,309,310,311,314],{},"Here's the step people forget: ",[146,312,313],{},"nothing exists as a usable dataset until you add an output (register) node."," The joins alone produce nothing you can put on a dashboard.",[230,316],{":items":317},"[{\"title\":\"Add the output node\",\"description\":\"Click the plus after your last join and add an Output node. This is what actually materializes the dataset.\"},{\"title\":\"Name it deliberately\",\"description\":\"Give it a clear label (e.g. 'Opp Owner Acc — from recipe'). Labels can have spaces; the API name can't. Use a clean API name you can paste into bindings later.\"},{\"title\":\"Apply, then Save and Run\",\"description\":\"Apply the output node, then Save and Run the recipe. It executes and builds your dataset.\"}]",[160,319,321],{"id":320},"same-result-different-engine","Same result, different engine",[142,323,324,325,327],{},"When it finishes, you have the same opportunities dataset — built by a ",[146,326,152],{}," reading from the same synced objects, instead of by a dataflow. Two engines, one outcome.",[329,330],"lesson-cards",{":columns":331,":items":332},"2","[{\"title\":\"Dataset Builder\",\"icon\":\"i-lucide-shield-check\",\"description\":\"Figures out relationships, keys, and hierarchy for you. Lookups only. Safest for beginners and quick baseline datasets.\"},{\"title\":\"Recipe\",\"icon\":\"i-lucide-sliders-horizontal\",\"description\":\"You choose objects, join types, and keys. Way more flexible and a friendlier UI — but you own the grain and the mistakes.\"}]",[142,334,335,336,339],{},"Which should you use? Honestly, it depends on your comfort and the job — a decision we'll unpack after one more, very common task: ",[146,337,338],{},"combining two datasets you've already built",". That's next.",{"title":341,"searchDepth":342,"depth":343,"links":344},"",1,2,[345,346,347,348,349],{"id":162,"depth":343,"text":163},{"id":220,"depth":343,"text":221},{"id":258,"depth":343,"text":259},{"id":306,"depth":343,"text":307},{"id":320,"depth":343,"text":321},"Recreate the opportunities dataset with a CRM Analytics recipe: select objects, join Account and User with the right keys, prefix and trim columns, and add an output node — the modern, flexible way to build datasets.","md",null,{},{"title":118},{"title":132,"description":350},{"id":357,"start":358,"end":359},"-0mp2mUjyVI",1632,2292,"NEKhMv7tV8pqU_CAL5IWfAK3rdr88mGJ5z063mUzZLk",[362,364],{"title":114,"path":115,"stem":116,"description":363,"children":-1},"Execute the default dataflow to build your dataset, monitor it in Data Manager, and fix the most common first-run error — objects that haven't been synced yet — by running Connect manually.",{"title":122,"path":123,"stem":124,"description":365,"children":-1},"Use a recipe to join your Salesforce opportunities dataset with the external CSV amounts into one final, enriched dataset — the everyday move that blends internal and external data for dashboards and stories.",[],1783475168693]