Praxis Academy
Home › Platform Administrator II › Data and Analytics Management

Platform Administrator II practice questions: Data and Analytics Management

Data and Analytics Management is 13% of the Salesforce Certified Platform Administrator II exam. It covers data tools, advanced reports and dashboards. Try these 12 free questions, then open each answer to see why every option is right or wrong.

01

After a data load, production now contains many duplicate Account records. The admin must stop new duplicates from being entered and also clean up the ones that already exist. Which two features cover both needs? (Choose 2)

  1. An Account Validation Rule that looks for records with the same name and blocks the save.
  2. Turning on the 'Prevent Duplicate Entry' toggle under Company Information.
  3. Duplicate Rules paired with Matching Rules that detect duplicate Accounts on create or edit and either block the save or show an alert.
  4. Duplicate Jobs that batch-scan records with the configured Matching Rules and list existing duplicate Accounts for review and merging.
Show answer

Answer: C, D

A. An Account Validation Rule that looks for records with the same name and blocks the save.Incorrect. Validation Rules are neither a scalable nor a proper way to detect duplicates, and they cannot find duplicates that already exist.
B. Turning on the 'Prevent Duplicate Entry' toggle under Company Information.Incorrect. Company Information has no such toggle; prevention is done with Matching Rules and Duplicate Rules.
C. Duplicate Rules paired with Matching Rules that detect duplicate Accounts on create or edit and either block the save or show an alert. ✓Correct. Matching Rules define what counts as a duplicate (for example, same name and phone), and Duplicate Rules decide whether to block, alert, or allow, which stops future duplicates.
D. Duplicate Jobs that batch-scan records with the configured Matching Rules and list existing duplicate Accounts for review and merging. ✓Correct. Duplicate Jobs run mass matching across existing records and surface likely pairs so an admin or data steward can review and merge them.

Why: Duplicate management relies on Matching Rules (how records are compared) and Duplicate Rules (what happens when a match is found) to stop duplicates at entry. Duplicate Jobs reuse those Matching Rules to scan the records already in the org and produce a list of likely duplicates to merge. Combined, they handle both prevention and cleanup.

02

One CSV file holds 15,000 Accounts that do not exist yet and 5,000 that already do. Every row has a unique value in the custom field 'Legacy_ID__c', which is defined as an External ID. Which Data Loader operation fits?

  1. Run two separate jobs: Insert for the 15,000 new records, then Update for the 5,000 existing ones.
  2. Insert all 20,000 rows with 'Allow Duplicates' checked and let duplicate rules sort out conflicts.
  3. Run Data Loader Upsert with 'Legacy_ID__c' as the External ID field, so rows with no matching External ID are inserted and rows with a match are updated in one pass.
  4. Use the Data Import Wizard's 'Update or Insert' option with Legacy_ID__c mapped as the match field.
Show answer

Answer: C

A. Run two separate jobs: Insert for the 15,000 new records, then Update for the 5,000 existing ones.Incorrect. Two jobs are wasted effort when Upsert on an External ID handles inserts and updates together.
B. Insert all 20,000 rows with 'Allow Duplicates' checked and let duplicate rules sort out conflicts.Incorrect. Insert always creates new records, so the 5,000 existing Accounts would be duplicated instead of updated.
C. Run Data Loader Upsert with 'Legacy_ID__c' as the External ID field, so rows with no matching External ID are inserted and rows with a match are updated in one pass. ✓Correct. Upsert matches each row on the External ID and inserts it when there is no match or updates it when there is, so the 15,000 new and 5,000 existing Accounts are handled in one run.
D. Use the Data Import Wizard's 'Update or Insert' option with Legacy_ID__c mapped as the match field.Incorrect. The wizard does not offer an 'Update or Insert' option that works like Data Loader Upsert on a custom External ID; Data Loader is the right tool for this load.

Why: Upsert is built for a single file that mixes new and existing records, told apart by an External ID. Rows that match an existing record through the External ID are updated, and the rest are inserted. It is the most efficient way to handle a mixed load.

03

In an org with multiple currencies enabled, users see report totals that differ from the amounts shown on individual Opportunity records. An analyst asks why. Which concept accounts for the difference?

  1. Reports pull live market exchange rates from a third-party feed, so they use a different rate than the one stored on the Opportunity.
  2. Reports convert every amount to the running user's currency at the current rate in Currency Management, whereas individual records may show amounts in the currency they were entered in.
  3. Opportunity records update their amounts automatically when rates change, but reports only refresh after a manual recalculation.
  4. The gap only happens in orgs with Advanced Currency Management, because dated rates apply per Opportunity while reports use one current rate.
Show answer

Answer: B

A. Reports pull live market exchange rates from a third-party feed, so they use a different rate than the one stored on the Opportunity.Incorrect. Salesforce does not use live market feeds; admins enter conversion rates manually in Currency Management.
B. Reports convert every amount to the running user's currency at the current rate in Currency Management, whereas individual records may show amounts in the currency they were entered in. ✓Correct. Reports show amounts converted to the display currency, usually the running user's, at the configured current rate, while each Opportunity shows its original entry currency.
C. Opportunity records update their amounts automatically when rates change, but reports only refresh after a manual recalculation.Incorrect. In standard Currency Management, neither records nor reports change retroactively; rates are applied at display or report run time.
D. The gap only happens in orgs with Advanced Currency Management, because dated rates apply per Opportunity while reports use one current rate.Incorrect. The difference described is normal standard-mode behavior, where records show the original currency and reports show converted totals; it is not caused by dated rates.

Why: With multiple currencies, each record stores its amount in the currency it was entered in. Reports convert everything to the user's (or the report's) currency using the current rate from Currency Management. The conversion is display-only and never changes the record. If rates moved since entry, the report total can differ from the original amounts.

04

A business must load 200,000 Accounts and their child Contacts from an external system. Which Data Loader approach handles the parent-child link correctly?

  1. Load the Contacts first with Account names, then load the Accounts using the Contact ID as the reference key.
  2. Load Accounts first with an External ID field filled in, then load Contacts referencing that Account External ID to set the relationship, without needing the Salesforce-generated Account IDs.
  3. Load Accounts and Contacts together in one step with the Data Import Wizard's 'Batch Relationship Import' feature.
  4. Send all 200,000 records through the Bulk API in one flat CSV that combines Account and Contact fields.
Show answer

Answer: B

A. Load the Contacts first with Account names, then load the Accounts using the Contact ID as the reference key.Incorrect. Contacts need an AccountId (or Account External ID) to link to their parent, and the Accounts would not exist yet if Contacts were loaded first.
B. Load Accounts first with an External ID field filled in, then load Contacts referencing that Account External ID to set the relationship, without needing the Salesforce-generated Account IDs. ✓Correct. Parents first with an External ID, then children referencing that External ID (via Insert or Upsert); Data Loader can set the Contact's AccountId from the parent's External ID even without the Salesforce Id.
C. Load Accounts and Contacts together in one step with the Data Import Wizard's 'Batch Relationship Import' feature.Incorrect. The Data Import Wizard has no 'Batch Relationship Import' feature; parent and child records need separate loads.
D. Send all 200,000 records through the Bulk API in one flat CSV that combines Account and Contact fields.Incorrect. The Bulk API processes one object per job, so a single combined Account and Contact CSV is not supported.

Why: For parent-child loads in Data Loader: first load the parents (Accounts) with an External ID populated on each; then load the children (Contacts), mapping the Account relationship through the parent's External ID field. This links each Contact to its Account without looking up every Salesforce-generated Account Id.

05

While building a report with a bucket field, an analyst sees that some Opportunities fall into none of the three amount buckets (Small, Medium, Large). What is the most accurate explanation?

  1. Bucket fields work only in summary and matrix reports, so the records are missing because the report is tabular.
  2. A report filter removes records with a null Amount before the bucket field is evaluated.
  3. A bucket field allows at most 5 buckets, and records beyond the fifth bucket's range are dropped from the report automatically.
  4. Opportunities with a null or blank Amount, and any that fall outside every defined range, go into the default 'Other' bucket, which the analyst may not be displaying.
Show answer

Answer: D

A. Bucket fields work only in summary and matrix reports, so the records are missing because the report is tabular.Incorrect. Bucket fields work in tabular, summary, and matrix reports, so the format is not the cause.
B. A report filter removes records with a null Amount before the bucket field is evaluated.Incorrect. An Amount filter could exclude records, but the more precise explanation is how bucket fields treat unmatched and null values.
C. A bucket field allows at most 5 buckets, and records beyond the fifth bucket's range are dropped from the report automatically.Incorrect. A bucket field supports up to 20 buckets, not 5, and out-of-range records are not dropped; they land in 'Other'.
D. Opportunities with a null or blank Amount, and any that fall outside every defined range, go into the default 'Other' bucket, which the analyst may not be displaying. ✓Correct. Null values and values outside every range are grouped as 'Other' by default, so hiding that category makes those records look missing.

Why: Records whose value matches no defined bucket, including null or blank values, are placed in the 'Other' bucket automatically. If the report shows only the named buckets (Small, Medium, Large) and leaves out 'Other', those records seem to disappear. The fix is to include 'Other' or add a bucket that covers null values.

06

In a summary report, an admin wants a custom summary formula using PARENTGROUPVAL that shows each Stage group's amount as a percentage of the total pipeline. Which report type and formula setup achieve this?

  1. A joined report with two blocks, computing the percentage with a cross-block formula that references each block's total.
  2. A matrix report using PREVGROUPVAL to express each Stage total as a percentage of the previous stage's total.
  3. A tabular report plus an Opportunity formula field that divides by a fixed denominator.
  4. A summary report grouped by Opportunity Stage with a Custom Summary Formula that uses PARENTGROUPVAL(Amount:SUM, GRAND_SUMMARY) as the denominator, giving each group's share of the grand total.
Show answer

Answer: D

A. A joined report with two blocks, computing the percentage with a cross-block formula that references each block's total.Incorrect. Joined reports do allow cross-block formulas, but PARENTGROUPVAL works inside a single summary or matrix report to reference a parent group's total.
B. A matrix report using PREVGROUPVAL to express each Stage total as a percentage of the previous stage's total.Incorrect. PREVGROUPVAL references the preceding grouping on the same level for period comparisons, not a share of the parent total.
C. A tabular report plus an Opportunity formula field that divides by a fixed denominator.Incorrect. Opportunity formula fields cannot see report aggregates; calculations on grouping totals need report-level custom summary formulas.
D. A summary report grouped by Opportunity Stage with a Custom Summary Formula that uses PARENTGROUPVAL(Amount:SUM, GRAND_SUMMARY) as the denominator, giving each group's share of the grand total. ✓Correct. PARENTGROUPVAL pulls the summary value from a higher grouping level, so dividing by PARENTGROUPVAL(Amount:SUM, GRAND_SUMMARY) gives each Stage group's percentage of the total pipeline.

Why: PARENTGROUPVAL returns a summary value from a specified parent grouping level. For example, Amount:SUM / PARENTGROUPVAL(Amount:SUM, GRAND_SUMMARY) gives each group's sum as a share of the grand total, and the formula is displayed at the grouping level of a summary report. PREVGROUPVAL instead looks at the previous grouping on the same level, which suits time-series comparisons.

07

A user wants a report formula that shows the percentage change in opportunity amount against an earlier period. The summary report is grouped by Close Month. Which report formula function returns the prior period's group value for the comparison?

  1. PARENTGROUPVAL(Amount:SUM, Close_Month), which returns the parent grouping's sum for the chosen month.
  2. PREVGROUPVAL(Amount:SUM, Close_Month), which returns the Amount:SUM of the preceding Close Month grouping so a period-over-period formula can be built.
  3. RSUM(Amount:SUM), which gives a running total from the first grouping through the current one.
  4. PREVGROUPVAL is not allowed in summary reports and works only in matrix report custom summary formulas.
Show answer

Answer: B

A. PARENTGROUPVAL(Amount:SUM, Close_Month), which returns the parent grouping's sum for the chosen month.Incorrect. PARENTGROUPVAL returns a value from a higher grouping level, not the previous value on the same level.
B. PREVGROUPVAL(Amount:SUM, Close_Month), which returns the Amount:SUM of the preceding Close Month grouping so a period-over-period formula can be built. ✓Correct. PREVGROUPVAL returns the summary value of the grouping just before the current one, so in a Close Month grouping it yields the prior month's Amount sum for computing the change.
C. RSUM(Amount:SUM), which gives a running total from the first grouping through the current one.Incorrect. RSUM accumulates a running total across groupings and does not return the previous group's value.
D. PREVGROUPVAL is not allowed in summary reports and works only in matrix report custom summary formulas.Incorrect. PREVGROUPVAL works in summary reports as well as matrix reports.

Why: PREVGROUPVAL(summary_field, grouping_field, increment) returns a summary value for an earlier grouping. The optional increment sets how many groupings back to look (default 1); with monthly groupings, an increment of 12 points to the same month last year. PARENTGROUPVAL looks up to a parent level, while PREVGROUPVAL looks back along the same level.

08

A summary report is grouped by Sales Rep (Opportunity Owner), and the admin wants a custom summary formula showing each rep's average deal size. Which formula calculates the average correctly?

  1. Amount:SUM divided by RowCount (Amount:SUM / RowCount)
  2. AVG(Amount), which returns the average Amount directly with no custom formula needed.
  3. Amount:SUM / Amount:COUNT, which divides the summed Amount by the number of Amount values in each grouping to give the average deal size.
  4. PARENTGROUPVAL(Amount:SUM, GRAND_SUMMARY) / PARENTGROUPVAL(Amount:COUNT, GRAND_SUMMARY), which gives the org-wide average across all reps.
Show answer

Answer: C

A. Amount:SUM divided by RowCount (Amount:SUM / RowCount)Incorrect. The idea is right, but the source states RowCount is not valid syntax in custom summary formulas and that RECORD_COUNT or Amount:COUNT should be used.
B. AVG(Amount), which returns the average Amount directly with no custom formula needed.Incorrect. AVG() is not a built-in function in custom summary formulas; the average has to be built as SUM divided by COUNT.
C. Amount:SUM / Amount:COUNT, which divides the summed Amount by the number of Amount values in each grouping to give the average deal size. ✓Correct. Amount:SUM gives the grouping's total and Amount:COUNT the number of non-null Amount values, so dividing them yields the average deal size per rep.
D. PARENTGROUPVAL(Amount:SUM, GRAND_SUMMARY) / PARENTGROUPVAL(Amount:COUNT, GRAND_SUMMARY), which gives the org-wide average across all reps.Incorrect. Using PARENTGROUPVAL with GRAND_SUMMARY gives the overall average for all reps, not each rep's own average.

Why: Custom summary formulas apply aggregate operators to fields with the FieldName:OPERATOR syntax. The average is Amount:SUM / Amount:COUNT, which divides each rep's total Amount by the number of non-null Amount records. Because Amount:COUNT ignores nulls, null Amounts drop out of both parts of the calculation.

09

A manager wants a ranked list of Contacts by how many Cases each one opened in the last 6 months, highest count first. Which report configuration delivers this?

  1. Create a joined report with one block listing Contact names and another block showing Case counts, sorted on the second block's count.
  2. Create a matrix report with Contacts on the rows and Case Created Date on the columns to show each Contact's count by month.
  3. Create a summary report on Cases using a Contacts with Cases report type, grouped by Contact Name, with a record count (RowCount) and the grouping sorted by Count descending.
  4. Export the Cases to a spreadsheet and rank Contacts by case volume with a pivot table.
Show answer

Answer: C

A. Create a joined report with one block listing Contact names and another block showing Case counts, sorted on the second block's count.Incorrect. Joined reports place related data in separate blocks; they are not needed for a simple group-and-rank requirement.
B. Create a matrix report with Contacts on the rows and Case Created Date on the columns to show each Contact's count by month.Incorrect. A matrix can show counts per period, but ranking Contacts by total cases is done more simply with a summary report sorted by count.
C. Create a summary report on Cases using a Contacts with Cases report type, grouped by Contact Name, with a record count (RowCount) and the grouping sorted by Count descending. ✓Correct. Grouping by Contact Name with a RowCount totals cases per Contact, and sorting the grouping by count descending produces the ranking.
D. Export the Cases to a spreadsheet and rank Contacts by case volume with a pivot table.Incorrect. A spreadsheet pivot is a manual workaround; the report builder can produce the ranked summary directly.

Why: Ranking aggregated values is a job for a summary report: choose a Contacts with Cases (or Cases with Contact) report type, group by Contact Name, add a record count, sort the grouping by count descending, and filter Created Date to the last 6 months.

10

A developer must query 10 million historical transaction rows stored in a Salesforce Big Object, and regular SOQL keeps timing out. How should big object data be queried at this scale?

  1. Ask Salesforce Support to raise the SOQL row-limit governor for the org.
  2. Move all the big object data to an external warehouse and query it there through a connected app.
  3. Use Async SOQL, which runs the query in the background and writes the results to a standard or custom Salesforce object for later use.
  4. Add a FOR UPDATE clause to the SOQL query to lock the rows and avoid read timeouts during the bulk retrieval.
Show answer

Answer: C

A. Ask Salesforce Support to raise the SOQL row-limit governor for the org.Incorrect. Governor limits are not raised through support requests, and big objects need a specific query mechanism anyway.
B. Move all the big object data to an external warehouse and query it there through a connected app.Incorrect. External warehousing can be a valid architecture, but the question asks for the in-platform approach, which is Async SOQL.
C. Use Async SOQL, which runs the query in the background and writes the results to a standard or custom Salesforce object for later use. ✓Correct. Async SOQL is the native way to query Big Objects at scale; it runs in the background and stores results in a standard or custom object.
D. Add a FOR UPDATE clause to the SOQL query to lock the rows and avoid read timeouts during the bulk retrieval.Incorrect. FOR UPDATE locks records against concurrent edits and does nothing for query performance or big object access.

Why: Async SOQL exists for querying very large Big Object data sets. It runs asynchronously, avoids synchronous timeouts, and places the results in a standard or custom object. Jobs are submitted and monitored through the API.

11

A payments business keeps cardholder data in Salesforce. An audit finds that full card numbers must never be stored in the org, although a truncated PAN (last 4 digits) may be kept. Which Salesforce design best enforces this?

  1. Encrypt the card number field with Shield Platform Encryption and set FLS to Hidden on every profile.
  2. Add a Validation Rule that rejects any value over 4 characters in the card number field to force truncated storage.
  3. Integrate Salesforce through External Services with a payment tokenization vault, keeping only the token and the last 4 digits in Salesforce and never writing the full PAN to any field.
  4. Add a custom formula field that trims any entered card number down to its last 4 digits before the record is saved.
Show answer

Answer: C

A. Encrypt the card number field with Shield Platform Encryption and set FLS to Hidden on every profile.Incorrect. Encryption still stores the full number; if it must never be stored, encrypting it does not satisfy the requirement.
B. Add a Validation Rule that rejects any value over 4 characters in the card number field to force truncated storage.Incorrect. A length check does not validate PAN format, and it is a fragile control rather than a proper design for keeping card data out of the org.
C. Integrate Salesforce through External Services with a payment tokenization vault, keeping only the token and the last 4 digits in Salesforce and never writing the full PAN to any field. ✓Correct. A tokenization service holds the full PAN outside Salesforce and returns a token; Salesforce keeps only the token and last 4 digits, removing it from PCI DSS scope for full card data.
D. Add a custom formula field that trims any entered card number down to its last 4 digits before the record is saved.Incorrect. Formula fields are read-only calculations; they cannot change what is stored in the source field, so the full PAN would still be saved.

Why: Under PCI DSS, full PANs should not be stored in systems that are not certified for it. The recommended design keeps the full number in an external tokenization vault, which returns a non-sensitive token; Salesforce stores only that token and the last 4 digits, so the full PAN never enters the database.

12

Apex code must call an external API. The endpoint URL needs to live in one central place instead of being hardcoded, and authentication must be handled automatically so Apex does not manage tokens. Which features should be set up? (Choose 2)

  1. A Remote Site Setting that authorizes the external endpoint URL for Apex HTTP callouts.
  2. A Named Credential (or External Credential) that holds the endpoint URL and handles authentication (OAuth, basic auth, JWT) automatically so Apex can refer to it by name.
  3. A Custom Metadata Type holding the endpoint URL and token, read by Apex at runtime.
  4. An Apex @future method that makes the callout asynchronously and so avoids the Remote Site Setting requirement.
Show answer

Answer: A, B

A. A Remote Site Setting that authorizes the external endpoint URL for Apex HTTP callouts. ✓Correct. Remote Site Settings (Setup > Security > Remote Site Settings) authorize external endpoints for Apex callouts; without one, Salesforce blocks requests to that domain.
B. A Named Credential (or External Credential) that holds the endpoint URL and handles authentication (OAuth, basic auth, JWT) automatically so Apex can refer to it by name. ✓Correct. A Named Credential stores the endpoint and credentials; when Apex calls callout:NamedCredentialName, Salesforce adds the authentication headers automatically.
C. A Custom Metadata Type holding the endpoint URL and token, read by Apex at runtime.Incorrect. Custom Metadata Types can store settings but do not run authentication flows, so Apex would still have to obtain and pass tokens.
D. An Apex @future method that makes the callout asynchronously and so avoids the Remote Site Setting requirement.Incorrect. @future methods can make callouts, but they do not bypass endpoint authorization requirements.

Why: Per the source key, Remote Site Settings authorize the endpoint domain for outbound calls, while Named Credentials store the URL and inject authentication automatically. Used together they give a configuration-driven integration with no hardcoded URLs or credentials in Apex.

Find out if you're ready to pass

Take the free Platform Administrator II diagnostic: 20 questions, no account needed. Then unlock all 180 questions, full practice exams and the study guide.

Start the free diagnosticSee plans

Other sections of this exam