How can I remove direct access to a Sheet, but still allow editing via Report?
TL:DR
We are looking for a way to change/break the url to an existing Sheet (340+ columns)withoutbreaking the connection to hundreds of Reports, thuspreventing direct access to a Sheet people already have the secure link to, while still allowing view/edit access to the data via Reports.
We've considered some options surrounding making a copy of the Sheet and updating Report references, but there are downsides to them (see Full Story below).
How else might this be achieved with a bare minimum of impact to User experience?
Full Story
我们的内容是b的结构uilt prior to having a particularly solid understanding of exactly how access worked and without really understanding just how huge our primary data intake sheet would grow up to.
The problem we have is that people have links to the data intake sheet and tend to work directly out of it instead of using the Reports that we've built for them. Education is not preventing this from happening, and form time to time an entire row of data will get accidentally deleted from the primary data intake sheet.
Our goal is to take away direct access to the primary sheet, but still point Reports to it so they can view and modify the specific data they need to do their jobs while also mitigating (but clearly not eliminating) the impact of an 'entire row' deletion.
There are more than 300 Reports that exist and all point to this primary data Sheet.
Our problem would be easily solved if we move the primary Sheet to a Workspace that users don't have access to (easy to do) and provide edit access to just the sheet (not the workspace!) and then change the permanent link of the primary Sheet (impossible to do, I suspect?) so none of the bookmarks etc. that go directly to that Sheet would work anymore, but people could still make their changes via existing Reports.
- We've tried copying the primary Sheet to the obfuscated Workspace, with the intent to then go through each Reports being actively used and change Sheet references from the old Sheet to the copied one. Cumbersome, but manageable. There are 2 problems with this approach:
- (1) Cell history does not also transfer
- (2) More importantly, our 60 or so Automations fail to get copied (and error is provided when this occurs - I already submitted a ticket and am awaiting a response, though that doesn't solve the cell history issue).
- We considered setting access to the primary Sheet to View-only and making a copy of the Sheet which they would have edit (but not direct) access to, and then DataMesh data from the New Sheet to the Old Sheet. That would preserve some semblance of data history but the user making the change would always be the user that owns the DataMesh. It would also leave all the Workflows intact. The detriment here is that any time a column is added or changed, the DataMesh would also need to be changed. It would also be a rather huge DataMesh (340+ columns to setup, and also extra load on the Smartsheets system (unless perhaps we set it up to trigger Hourly instead of Immediately? Some Workflow triggers rely on up to the minute data)
Unfortunately the average user (actually, majority of users) have trouble understanding the difference between Sheets and Reports to begin with, let alone why they shouldn't work out of the primary Sheet, and have after months, proven they are unable/unwilling to stop working out of the Sheet after multiple and long standing requests, so a method of forcing this change to happen is required if we want to see it through.
How might this be achieved with the bare minimum impact on User experience?
Best Answer
-
Mike E ✭✭
Turns out leaving everyone as an Editor and just hiding columns does a pretty good job of discouraging direct use of the primary data sheet. They still need to use it to set reminders, but otherwise, it seems to be doing the job!
Answers
-
Julio S. Moderator
Hi@Mike E,
The most straight forward way of achieving what you intend would be throughDynamic view, as this would allow giving specific users only access to the data that is relevant to them directly in the sheet without interacting through a Report. Note that Dynamic View is a premium app and you may need to purchase it if your account doesn't have it yet.
The problem with Reports is that users will always need to be shared to the underlying data sheet(s), otherwise they wouldn't be able to see or edit the information within (depending on their user type).
Although it may require some work, the most reasonable alternative to Dynamic View would be to create individual versions of the master sheet for each user (maybe creating atemplate并要求每个用户保存自己的版本)d then consolidate all data from all Project sheets into a single Report where only the program supervisors (not the updaters) have access to. If you'd need to preserve existing data in each of the sheets, you may selectively move/copy rows from the current master sheet to each new project sheets with the help of automation (Automatically move or copy rows between sheets)
This would be a new approach that wouldn't preserve the cell history but since each user should only have access to their own sheet, a new cell history / activity log will be created for each sheet allowing individual tracking of the data.
I hope that this can be of help.
Cheers!
Julio
-
Mike E ✭✭
Thanks Julio - I appreciate your fresh ideas!
It sounds like Dynamic View may come fairly close. The downside is that it would require quite a lot of manually replacing of users' Reports and, worse, asking the company for an additional purchase
I think individual versions of the primary Sheet would get tricky to manage because changes would have to merge across all of the Sheets, which is really exactly what the Reports are designed to facilitate and is not really functionally possible with cell links (we tried), and I think DataMesh would either error if we tried, or be inconsistent if it even allows meshing data in both directions between sheets (race condition?)
"The problem with Reports is that users will always need to be shared to the underlying data sheet(s), otherwise they wouldn't be able to see or edit the information within (depending on their user type)."
Exactly! I'm honestly surprised that Smartsheets doesn't have an option for editing data on a Sheet via Reportsonly. An 'Editor - via reports only' sharing status would be handy for cases like mine.
Thanks again!
Mike
-
Mike E ✭✭
Turns out leaving everyone as an Editor and just hiding columns does a pretty good job of discouraging direct use of the primary data sheet. They still need to use it to set reminders, but otherwise, it seems to be doing the job!
Categories
<\/p>
=VALUE(IFERROR(JOIN(DISTINCT(COLLECT([Customer PO Amount (USD)]@row:[Customer PO Amount (Local Currency)]@row, [Customer PO Amount (USD)]@row:[Customer PO Amount (Local Currency)]@row, <>\"\"))), \" \"))<\/p>"}]}},"status":{"statusID":3,"name":"Accepted","state":"closed","recordType":"discussion","recordSubType":"question"},"bookmarked":false,"unread":false,"category":{"categoryID":321,"name":"Smartsheet Basics","url":"https:\/\/community.smartsheet.com\/categories\/smartsheet-basics%2B","allowedDiscussionTypes":[]},"reactions":[{"tagID":3,"urlcode":"Promote","name":"Promote","class":"Positive","hasReacted":false,"reactionValue":5,"count":0},{"tagID":5,"urlcode":"Insightful","name":"Insightful","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":11,"urlcode":"Up","name":"Vote Up","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":13,"urlcode":"Awesome","name":"Awesome","class":"Positive","hasReacted":false,"reactionValue":1,"count":0}],"tags":[{"tagID":254,"urlcode":"formulas","name":"Formulas"}]},{"discussionID":109460,"type":"question","name":"IF \/ OR formula then Check a Box","excerpt":"I need a formula that IF a specific column has either 1 of 2 specific choices, then a BOX in another column is checked: =IF(([Study Status]@row = \"Active\/ Open to Accrual\", 1) OR([Study Status]@row = \"In Start-Up\", 1))","snippet":"I need a formula that IF a specific column has either 1 of 2 specific choices, then a BOX in another column is checked: =IF(([Study Status]@row = \"Active\/ Open to Accrual\", 1)…","categoryID":321,"dateInserted":"2023-08-25T13:30:39+00:00","dateUpdated":null,"dateLastComment":"2023-08-25T16:21:27+00:00","insertUserID":9250,"insertUser":{"userID":9250,"name":"Susan Swisher","url":"https:\/\/community.smartsheet.com\/profile\/Susan%20Swisher","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/defaultavatar\/nWRMFRX6I99I6.jpg","dateLastActive":"2023-08-25T16:23:49+00:00","banned":0,"punished":0,"private":false,"label":"✭✭✭✭✭"},"updateUserID":null,"lastUserID":161714,"lastUser":{"userID":161714,"name":"Carson Penticuff","url":"https:\/\/community.smartsheet.com\/profile\/Carson%20Penticuff","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/userpics\/B0Q390EZX8XK\/nBGT0U1689CN6.jpg","dateLastActive":"2023-08-26T01:04:51+00:00","banned":0,"punished":0,"private":false,"label":"✭✭✭✭✭✭"},"pinned":false,"pinLocation":null,"closed":false,"sink":false,"countComments":9,"countViews":45,"score":null,"hot":3385956126,"url":"https:\/\/community.smartsheet.com\/discussion\/109460\/if-or-formula-then-check-a-box","canonicalUrl":"https:\/\/community.smartsheet.com\/discussion\/109460\/if-or-formula-then-check-a-box","format":"Rich","tagIDs":[254],"lastPost":{"discussionID":109460,"commentID":392616,"name":"Re: IF \/ OR formula then Check a Box","url":"https:\/\/community.smartsheet.com\/discussion\/comment\/392616#Comment_392616","dateInserted":"2023-08-25T16:21:27+00:00","insertUserID":161714,"insertUser":{"userID":161714,"name":"Carson Penticuff","url":"https:\/\/community.smartsheet.com\/profile\/Carson%20Penticuff","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/userpics\/B0Q390EZX8XK\/nBGT0U1689CN6.jpg","dateLastActive":"2023-08-26T01:04:51+00:00","banned":0,"punished":0,"private":false,"label":"✭✭✭✭✭✭"}},"breadcrumbs":[{"name":"Home","url":"https:\/\/community.smartsheet.com\/"},{"name":"Get Help","url":"https:\/\/community.smartsheet.com\/categories\/get-help"},{"name":"Smartsheet Basics","url":"https:\/\/community.smartsheet.com\/categories\/smartsheet-basics%2B"}],"groupID":null,"statusID":3,"attributes":{"question":{"status":"accepted","dateAccepted":"2023-08-25T15:13:03+00:00","dateAnswered":"2023-08-25T14:14:39+00:00","acceptedAnswers":[{"commentID":392575,"body":"
Give this a try:<\/p>
=IF(OR([Study Status]@row = \"Active\/Open to Accrual\", [Study Status]@row = \"In Start-Up\"), 1)<\/p>"}]}},"status":{"statusID":3,"name":"Accepted","state":"closed","recordType":"discussion","recordSubType":"question"},"bookmarked":false,"unread":false,"category":{"categoryID":321,"name":"Smartsheet Basics","url":"https:\/\/community.smartsheet.com\/categories\/smartsheet-basics%2B","allowedDiscussionTypes":[]},"reactions":[{"tagID":3,"urlcode":"Promote","name":"Promote","class":"Positive","hasReacted":false,"reactionValue":5,"count":0},{"tagID":5,"urlcode":"Insightful","name":"Insightful","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":11,"urlcode":"Up","name":"Vote Up","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":13,"urlcode":"Awesome","name":"Awesome","class":"Positive","hasReacted":false,"reactionValue":1,"count":0}],"tags":[{"tagID":254,"urlcode":"formulas","name":"Formulas"}]},{"discussionID":109457,"type":"question","name":"Conditional Formatting (modified date not in the last 3 weeks)","excerpt":"I would like to use Conditional Formatting (highlight the entire row yellow) if the modified date is not within the last 3 weeks. So any row that has not been recently updated (last 3 weeks) should be highlighted in yellow. Is this spmething that can be done directly within conditional formatting or should I first create a…","snippet":"I would like to use Conditional Formatting (highlight the entire row yellow) if the modified date is not within the last 3 weeks. So any row that has not been recently updated…","categoryID":321,"dateInserted":"2023-08-25T12:33:14+00:00","dateUpdated":null,"dateLastComment":"2023-08-25T12:40:57+00:00","insertUserID":161267,"insertUser":{"userID":161267,"name":"Jef Snyders","title":"Jef Snyders","url":"https:\/\/community.smartsheet.com\/profile\/Jef%20Snyders","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/userpics\/4HJAEW33KBD0\/nXEKEZE5EQEV4.jpg","dateLastActive":"2023-08-25T13:32:31+00:00","banned":0,"punished":0,"private":false,"label":"✭✭"},"updateUserID":null,"lastUserID":161267,"lastUser":{"userID":161267,"name":"Jef Snyders","title":"Jef Snyders","url":"https:\/\/community.smartsheet.com\/profile\/Jef%20Snyders","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/userpics\/4HJAEW33KBD0\/nXEKEZE5EQEV4.jpg","dateLastActive":"2023-08-25T13:32:31+00:00","banned":0,"punished":0,"private":false,"label":"✭✭"},"pinned":false,"pinLocation":null,"closed":false,"sink":false,"countComments":2,"countViews":26,"score":null,"hot":3385935251,"url":"https:\/\/community.smartsheet.com\/discussion\/109457\/conditional-formatting-modified-date-not-in-the-last-3-weeks","canonicalUrl":"https:\/\/community.smartsheet.com\/discussion\/109457\/conditional-formatting-modified-date-not-in-the-last-3-weeks","format":"Rich","tagIDs":[437],"lastPost":{"discussionID":109457,"commentID":392553,"name":"Re: Conditional Formatting (modified date not in the last 3 weeks)","url":"https:\/\/community.smartsheet.com\/discussion\/comment\/392553#Comment_392553","dateInserted":"2023-08-25T12:40:57+00:00","insertUserID":161267,"insertUser":{"userID":161267,"name":"Jef Snyders","title":"Jef Snyders","url":"https:\/\/community.smartsheet.com\/profile\/Jef%20Snyders","photoUrl":"https:\/\/us.v-cdn.net\/6031209\/uploads\/userpics\/4HJAEW33KBD0\/nXEKEZE5EQEV4.jpg","dateLastActive":"2023-08-25T13:32:31+00:00","banned":0,"punished":0,"private":false,"label":"✭✭"}},"breadcrumbs":[{"name":"Home","url":"https:\/\/community.smartsheet.com\/"},{"name":"Get Help","url":"https:\/\/community.smartsheet.com\/categories\/get-help"},{"name":"Smartsheet Basics","url":"https:\/\/community.smartsheet.com\/categories\/smartsheet-basics%2B"}],"groupID":null,"statusID":3,"attributes":{"question":{"status":"accepted","dateAccepted":"2023-08-25T12:40:09+00:00","dateAnswered":"2023-08-25T12:37:47+00:00","acceptedAnswers":[{"commentID":392551,"body":"
There is no direct way to do this. Adding a checkbox helper column with something similar to this and then formatting based on the checkbox is the simplest way. You can even hide the extra column, as there is no reason for it to be visible.<\/p>
=IF([Modified Date]@row < TODAY(-21), 1, 0)<\/p>"}]}},"status":{"statusID":3,"name":"Accepted","state":"closed","recordType":"discussion","recordSubType":"question"},"bookmarked":false,"unread":false,"category":{"categoryID":321,"name":"Smartsheet Basics","url":"https:\/\/community.smartsheet.com\/categories\/smartsheet-basics%2B","allowedDiscussionTypes":[]},"reactions":[{"tagID":3,"urlcode":"Promote","name":"Promote","class":"Positive","hasReacted":false,"reactionValue":5,"count":0},{"tagID":5,"urlcode":"Insightful","name":"Insightful","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":11,"urlcode":"Up","name":"Vote Up","class":"Positive","hasReacted":false,"reactionValue":1,"count":0},{"tagID":13,"urlcode":"Awesome","name":"Awesome","class":"Positive","hasReacted":false,"reactionValue":1,"count":0}],"tags":[{"tagID":437,"urlcode":"conditional-formatting","name":"Conditional Formatting"}]}],"initialPaging":{"nextURL":"https:\/\/community.smartsheet.com\/api\/v2\/discussions?page=2&categoryID=321&includeChildCategories=1&type%5B0%5D=Question&excludeHiddenCategories=1&sort=-hot&limit=3&expand%5B0%5D=all&expand%5B1%5D=-body&expand%5B2%5D=insertUser&expand%5B3%5D=lastUser&status=accepted","prevURL":null,"currentPage":1,"total":4991,"limit":3},"title":"Trending in Smartsheet Basics","subtitle":null,"description":null,"noCheckboxes":true,"containerOptions":[],"discussionOptions":[]}">