Best Of
Re: How can I get the column to accurately track hours elapsed?
@GasserE Does this video help?
Re: j'ai un autre compte professionnel qui est bloqué
Bonjour @Rahal Mouhib,
J'ai remarqué que vous avez un ticket ouvert avec notre équipe d'assistance. Si vous avez besoin de plus d'aide, veuillez continuer à travailler avec l'équipe afin qu'elle puisse communiquer avec vous via des canaux privés concernant les informations liées à votre compte. Cependant, en attendant, je vous recommande de suivre les étapes de cet article d'aide : Dépannage : TOTP par e-mail.
Merci,
Georgie
Re: Recover from a Snapshot vs Deleted Items - What's better?
Hey @Kathy PPT
Just chiming in here to help clarify! It looks like there were two separate Questions (discussions) posted, but with similar content, so our Moderation team merged them into one post (this post) so that members in the Community could see your full context.
Are you missing other Community discussions or comments? Did you receive an error message when trying to post?
Bridge examples including Javascript
Hi fellow Smartsheeters! In preparation for my session at Engage 2024, The future of workflows, I'm posting a variety of live Bridge examples to this thread. Each "block" will have a use case description, workflow layout, and (if needed) the javascript code I used.
Enjoy!
Preserving Human-Driven Modifications in Smartsheet
Hi Community.
Reflecting on the solution to kbloch's question regarding unwanted automation changes in Smartsheet, I devised a method to track human-driven modifications. I want to share this approach with the community, hoping it can enhance how we manage and restore data integrity.
Step-by-Step Process to Preserve Modification Records
Creating a backup and history of changes in Smartsheet, particularly for the "Modified" and "Modified By" columns, is crucial for maintaining accurate records, especially when dealing with unintended modifications due to automation. Here’s a breakdown of how to implement a strategy to preserve these details:
Modified, Modified By Report
Copy Rows Workflow Automation
- Create a Workflow with Trigger Conditions:
- Objective: Trigger a workflow when any row is modified.
- Trigger Conditions: Set up the workflow to trigger on changes in any cell within a row. Add a condition to ensure it does not trigger if the modification is made by the automation account (e.g., automation@smartsheet.com), thus capturing only human-driven changes.
- Copy Rows to a Backup or Record Sheet:
- Objective: When a row meets the trigger condition, copy it to another sheet dedicated to tracking changes.
- Details: This preserves the row's state at the time of modification. Ensure the row ID or any unique ID is maintained for easy reference.
Use System and Helper Columns
Original Sheet
- Modified By Text(Original Sheet): A helper column in the original sheet can be used with a formula like
=[Modified By]@row
to capture the user who made the change. This value is then copied to the backup sheet, maintaining the integrity of the "Modified By" data. - Created Column (Record Sheet): Automatically captures the date and time when the row was copied to the backup sheet.
Record Sheet
- Highlight the Latest Changes: (Optional)
- Latest Column: In the backup sheet, implement a formula to identify the most recent change for each row. For example,
=IF(Created@row = MAX(COLLECT(Created:Created, [Row ID]:[Row ID], [Row ID]@row)), 1)
. This formula checks if the "Created" date of the row is the most recent among all entries with the same Row ID.
- Latest Column: In the backup sheet, implement a formula to identify the most recent change for each row. For example,
Modified, Modified By Report
- Create a Report:(Top Image)
- Objective: Use both the original and backup sheets to compile a report.
- Report Configuration: Group data by Row ID and include relevant columns from both sheets—particularly the "Modified By Text" and "Created" columns from the backup sheet and any applicable data from the original sheet.
Advantages of This Method
- Accuracy: Ensures that human modifications are recorded precisely, without interference from automated processes.
- Recovery: Facilitates easy recovery of previous data states if an unintended modification occurs.
- Audit Trail: Provides a clear historical record for audit purposes, which can be critical for tracking changes in sensitive or critical data environments.
By implementing these steps, you can ensure that your Smartsheet data remains accurate and that all changes are traced back to their origins, providing transparency and accountability in data management.
Limitation
Even if you change the Record Sheet's Created system column name, the report shows it as "Created", so you need to interpret the Created as the Modified (Date) of the Original Sheet.
Ready Status Solved - I hope this helps everyone
I've seen a lot of posts with people trying to figure out how to parse out predecessors so that they can set the status of the next task to "Ready" or something similar. I came up with a solution that worked for me, I figured I'd share it. This solution takes care of the various dependency types and lead/lags.
1) Create an Auto Numbering column ("ID")
2) Create a Column to get row numbers ("Index"): MATCH(ID@row, ID:ID, 0)
3) Create a row number column for each non-FS predecessor type you plan to use:
a) FF Index = Index + "FF"
b) SS Index = Index + "SS"
4) Create a multi-select Helper column ("Dependency Helper"): SUBSTITUTE(SUBSTITUTE(Predecessors@row, "FS", ", "), ",", CHAR(10))
5) Create multi-select columns for each dependency type you plan to use:
a) FS Dependencies: JOIN(COLLECT(Index:Index, Index:Index, HAS(Dependencies@row, @cell)), CHAR(10))
b) FF Dependencies: JOIN(COLLECT([FF Index]:[FF Index], [FF Index]:[FF Index], HAS(Dependencies@row, @cell)), CHAR(10))
c) SS Dependencies: JOIN(COLLECT([SS Index]:[SS Index], [SS Index]:[SS Index], HAS(Dependencies@row, @cell)), CHAR(10))
You will now have all of your dependencies separated by type and all lags removed. You can use this to build out status logic however you'd like. Below is an example for setting a Task to "Ready" if all FS Predecessors are 100% complete and all SS Predecessors are greater than 0% complete:
=IF(COUNTM([SS Dependencies]@row, [FS Dependencies]@row) = COUNTIFS(Index:Index, FIND(@cell, [FS Dependencies]@row) > 0, [% Complete]:[% Complete], =1) + COUNTIFS(Index:Index, FIND(@cell, [SS Dependencies]@row) > 0, [% Complete]:[% Complete], >0), "Ready", "Queued")
Cheers!
Vince K.
vince@nnaviaconsulting.com
https://www.linkedin.com/in/vineshkapadia
Community で人気のコメント(4) Smartsheetで最後にセルを変更したユーザーを可視化する数式
Smartsheet Community (英語版)で人気のコメントのうち、「いいね!」と思ったものをご紹介します。
第4回目は、私の友人、ベトナムのジアティンさん(@Gia Thinh )がグローバルディスカッションのスペイン語版でマルコさん(@Marco B )が質問した、「Smartsheetで最後にセルを変更したユーザーを可視化する数式」について、2つの方法を提案した、という色々な面で面白いやり取りです。
はじめに
Smartsheet では編集履歴が、システム列(Created By, Modfied By)、セルの履歴、アクティビティーログに記録されており、監査に適したツールといえます。(Smartsheetを内部監査への利用を開設した記事)
今回ご紹介するのは、最後にセルを変更したユーザを可視化する方法で、具体的には、変更者 Modified By が、その後、自動化などで変更されてしまうのに、どのように対応するかという内容です。詳しい内容は最後尾の翻訳を見ていただくとして、紹介されたワークフローの自動化を用いた2つの方法を要約しておきましょう。
1 行のコピーによりログ用のシートを作る方法
2 変更者を記録する方法
1は変更者 Modified Byがその後の操作で変更されてしまう前に、行ごとログシートにコピーし、変更を防ぐという方法です。この方法は、私もクライアントに対する作業時間記録報告などに用いています。
2は特定の承認者が決まっている場合に、誰が承認したかを簡単に記録する方法です。変更者の変化をトリガーとして、特定の承認者かをチェックし、そうである場合、割り当て先にその者を記録する、というものです。特定の承認者、という条件がない場合には、変更者が自動化の場合も記録してしまうので、特定の承認者が決まっている場合に有効な解決方法です。1がコピー先のログシートが一杯になってしまいオーバーフローするという問題も解決しています。
監査における最終変更者表示の重要性
監査において、誰がいつどのデータを変更したかという情報は、データの正確性や整合性を検証する上で非常に重要な要素となります。特に、重要な意思決定に影響を与えるデータについては、その変更履歴を詳細に追跡することが求められます。
2つの回答の比較
今回の質問に対する2つの回答は、それぞれ異なるアプローチで最終変更者を追跡する方法を提示しています。
- 回答1:行コピーによるログシートによる追跡
- 長所:
- シンプルな方法で変更履歴を記録できる。
- 柔軟性が高く、様々な種類の変更を追跡できる。
- 短所:
- オーバフロー対応などログシートの管理が必要となり、データ量が増えると処理が遅くなる可能性がある。
- 長所:
- 回答2:ユーザー割り当てワークフローによる自動化
- 長所:
- 特定の列の変更履歴を自動的に記録できる。
- シンプルな設定で実装できる。
- 短所:
- 変更者が特定される場合しか使うことができない。
- 適用範囲が特定の列に限定される。
- 長所:
監査に役立つ点
どちらの回答も、最終変更者を特定できるという点で監査に役立ちます。しかし、監査の目的やデータの性質によって、より適した方法が異なります。
- ログシートは、詳細な変更履歴を記録したい場合や、様々な種類の変更を追跡したい場合に適しています。
- ユーザ割り当てワークフローは、承認者などの特定の列の変更履歴を自動的に記録したい場合や、シンプルな設定で運用したい場合に適しています。
まとめ
監査において最終変更者を特定することは、データの信頼性を確保するために不可欠です。Smartsheetその可視化を行うには、ログシートやワークフローなど、様々な方法で最終変更者を追跡することができます。どの方法を選択するかは、監査の目的やデータの性質、システム環境などを考慮して決定する必要があります。
翻訳Smartsheetで最後にセルを変更したユーザーを可視化する数式はありますか?マルコ・B ✭
こんにちは、コミュニティ、
Smartsheet で、"X" セルの "X" 列を最後に変更したユーザーを列に表示できる数式があるかどうか知りたいです。
Smartsheetには、"Last modified user "というカラムを追加することで、最後のユーザーを確認できる機能があることは知っています。また、特定のセルを右クリックすることで、そのセルの履歴を確認することもできますが、これは非常に手動です。
以下の数式を使ってみましたが、うまくいきませんでした。監査に関連する問題のためにこの情報が必要です。よろしくお願いします。
- 数式: =IF([特定の列]@row = MODIFIED(), USER(), "")
ベストアンサー
- ジアティン ✭✭✭✭✭✭
- 07/25/24 答え✓
- @マルコ、
特定のユーザーのみが「スーパーバイザーの最初のステータス」列を変更できる場合は、以下のスクリーンショットに示すように、「ユーザーの割り当て」ワークフローを使用して、その列を最後に変更したユーザーを記録できます。
プロセスは次のとおりです。これらのユーザーの 1 人が「最初の承認ステータス」を変更すると、「変更者」システム列にそのユーザーの電子メールが自動的に記録されます。その後、ワークフローを使用して、「最終承認者」列にそのユーザーの名前を記録できます。
それがあなたにとってうまくいくことを願っています。
Gia Thinh Technology Co., LTD - Smartsheet ソリューション パートナー。
回答
- ジアティン ✭✭✭✭✭✭
- 07/24/24 2024年7月24日編集
- こんにちは、マルコ。
Google翻訳を使ってあなたの投稿を理解しようとしました。
ログ シートを使用して、特定の「テスト列」に基づいて元のシートの変更を記録する 1 つのアイデアとして、次のことが考えられます。- 元のシートにシステム変更者列を追加します
- 新しいログシートを作成する
- 元のシートに行コピー自動化ワークフローを作成し、「テスト列」に変更があるたびに元のシートからログシートに行をコピーします。
- 元のシートの各行の履歴変更を表示するには、「グループ化」プライマリ列を使用してレポートを作成します(ログシートを参照)。
デモについては以下のスクリーンショットをご覧ください。
Gia Thinh Technology Co., LTD - Smartsheet ソリューション パートナー。
マルコ・B ✭
@Gia Thinh 、
ご提案いただいた方法を試してみましたが、残念ながら期待通りには機能しませんでした。行をコピーするのではなく、移動していましたが、これは意図した結果ではありませんでした。このアプローチの背後にある理由は、ファイル内でオーバーロードが発生しないようにするためです。
要件を明確にするために、以下にスクリーンショットを添付しました。ご覧のとおり、行番号 20 では、行全体を最後に変更したユーザーが 07/24/24 の Smartsheet オートメーションであったことが示されています。ただし、実際に必要なのは、「スーパーバイザーの 1 番目のステータス」というタイトルの列のみを最後に変更したユーザーを追跡することです。「セル履歴の表示」によると、この列を 12/07/24 に変更したのはユーザー「Suly He」でした。
この要件に対応するために、「スーパーバイザーの最初のステータス」列を最後に変更したユーザーの名前を 1 つのセルに表示できるソリューションを見つけるお手伝いをいただければ幸いです。これにより、他の行に影響を与えたり、ファイルのオーバーロードを引き起こしたりすることなく、この特定の列に関連するアクティビティを追跡するのに大いに役立ちます。
この件にご注目いただきありがとうございます。皆様のご意見やご提案をお待ちしております。
回答2
(ベストアンサーと同じ)
マルコ・B ✭
@Gia Thinh 、
この解決策を共有していただき、本当にありがとうございます。私たちにとっては非常にうまくいきました。あなたのサポートに、また、時間を割いてアジャイルかつシンプルな方法でステップバイステップで反映してくれたことに、とても感謝しています。あなたは最高です! 😀
ジアティン ✭✭✭✭✭✭
うまくいったようでよかったです。
Gia Thinh Technology Co., LTD - Smartsheet ソリューション パートナー。
Help us prevent Spamming in the Community!
Hello to all our wonderful Community Members,
Some of you may have seen email notifications come through with posts this week containing obvious spam & false advertising with phone numbers and links. Our Moderation team is actively monitoring the site and doing our best to catch, and ban, any and all spammers (as this goes against our Community guidelines).
However, we need your help!
If you see any posts in the forum that contain obvious spam content, please use the flag icon to flag this as spam.
We are so grateful for all of you, and for all that you do to make this Community a safe, engaging, and productive space to be in!
Thank you,
Genevieve
Community で人気のコメント(3) 最初の出現箇所を見つけて日付を返す数式(COLLECT関数)
Smartsheet Community (英語版)で人気のコメントのうち、「いいね!」と思ったものをご紹介します。
しばらくサボっていましたが、第3回目は、コミュニティーアンバサダー(大使)のニック・コルナ (@Nick Korna)さんがコニー・コクラン(@Connie Cochran)の質問に答えて回答した「最初の出現箇所を見つけて日付を返す数式」についての記事です。
はじめに
同一の質問に同一人物から複数の回答がある場合、最初の回答や最新の回答を参照したい場合があります。
コクランさんの場合は、同一クライアントに複数のイベントがあり、最初の出現のイベント日を参照したい、という内容の質問です。
質問と回答の要約
質問と回答の要約は以下の通りです:
質問
Connie Cochranさん (2024年2月3日) クライアント名を見てイベント日を返す数式を作成しようとしていますが、クライアント名が重複している場合は、最初の出現のイベント日だけを返すようにしたいです。しかし、解析エラーが出ます。助けてください。
回答
Nick Kornaさん (2024年2月3日)
最初の出現の日付を取得したい場合は、以下のように INDEX COLLECT を使用できます:
=INDEX(COLLECT([Event Date]:[Event Date], [Client Name]:[Client Name], [Client Name]@row), 1)
クライアントの最も早い日付を取得したい場合は、以下のように MIN COLLECT を使用できます:
=MIN(COLLECT([Event Date]:[Event Date], [Client Name]:[Client Name], [Client Name]@row))
追加の質問
Connie Cochranさん これをアーカイブシートの同じ列を見て、両方から最も早い日付を取得するようにする方法はありますか?
追加の回答
Nick Kornaさん アーカイブシートから最も早い日付を取得するためにもう一つ MIN COLLECT を使用し、両方の MIN COLLECT を MIN 内に入れることができます。これにより、絶対に最も早い日付を取得できます。最初に個別の列でテストし、正しい結果を確認してからすべてを1つにまとめることをお勧めします。
解説
INDEX関数は範囲( 評価対象となるセルのグループ)に対して行のインデクスまたは列のインデックスを指定して範囲の中から特定のアイテムを取得できます。
通常はMATCH関数を組み合わせて、INDEX(MATCH())の形式で使うことが一般です。
すなわち、MATCH関数で取得した範囲内の値の相対位置をINDEX関数の行のインデックスとするわけです。
したがって、質問の最初の出現のイベント日知りたい場合は、以下の式でも取得可能です。
=INDEX([Event Date]:[Event Date], MATCH(Client@row, [Client Name]:[Client Name]))
(なお、私のデモシートはSheet Summary のClientで選んだクライアントについて、評価する方式なので、Client@row はClient#となります。)
ただ、行や列のインデックスを指定する方法は、MATCHでなくてもいいので、コルナさんが示しているようにCOLLECT関数で予め自分の欲しい範囲を作っておいて、行のインデックスを1で指定する、という方法も可能となります。
=INDEX(COLLECT([Event Date]:[Event Date], [Client Name]:[Client Name], Client@row), 1)
このCOLLECTを利用すれば、範囲に対して評価する関数、例えば、MIN、MAX、COUNTなどを利用でき便利です。質問にある最も早い日付を取得する場合、日付は数値として扱えるので、MINで評価してやれば取得可能です。MATCHだと一つだけの相対位置が返されるのに対して、COLLECTは欲しい範囲の評価対象セルグループを取得できるので、そのセルグールに対する評価が可能となります。
コルナさんの式
=MIN(COLLECT([Event Date]:[Event Date], [Client Name]:[Client Name], [Client Name]@row))
再質問にあるアーカイブシートも含めて最も早い日付を取得の質問の回答を下のデモシートに作っておきました。(なお、別シートでなく、同じシートのアーカイブクライアント、アーカイブイベント日付を含めての最も早い日付を取得しています。)
=MIN(
COLLECT([Event Date]:[Event Date], [Client Name]:[Client Name], Client#),
COLLECT([Archive Event Date]:[Archive Event Date], [Archive Client Name]:[Archive Client Name], Client#)
)
なお、「両方の MIN COLLECT を MIN 内に入れる」ことも可能ですが、上の式のようにまとめてMINの評価をして、個々のCOLLECTのMINは省略しても、結果は同じです。
上の式は見やすくするために改行しています。MINは数値又は範囲を「,」で区切って評価対象とすることができます。
(下のSmartsheetのリンクをクリックして公開デモシートを開き、Sheet SummaryのClientを変更して、各式の動作を確認できます。)
まとめ
COLLECT関数は別の関数の中で使用し、ある範囲内にて、提供された条件に合致する特定の値を収集します。今回の例のようにMIN関数と組み合わせると、条件に合致するものの中から最小のものを取得できます。
よく使うのはJOIN関数、COUNT関数、INDEX関数などで、JOINの場合はCOLLECTで収集した文字を繋げる、COUNTは数を数える、INDEXは特定の位置のものを取得する、ことができます。
Re: Quote of the Day on Dashboard
Hi @Coby.C
I created this demo for fun. You need source data for the daily quote. Since I have only 20 quotes, I cycle through them using this formula:
=IF(INT(DAY(TODAY(1)) * 20 / 31) = [Row ID]@row, 1)
To display it on the dashboard, I used the metrics widget to make it look better. Here's the formula I used:
=JOIN(COLLECT({Quote}, {Quote of the Day}, 1))
Doesn't the quote in the image capture the spirit of our community?