This recipe is a simple HTML block that pulls staff data from 2 dataviews and presents a list of all upcoming events. You need to have a way to identify your staff from your regular members. We use the Organization group.
StaffList.jpg

Data

I wrote 2 dataviews to pull all staff with non-blank birthdate and non-blank anniversary date then use those dataview ids to create the html block.

HTML Block

Copy the code below into the code of your html block. Be sure to check RockEntity on the HTML block's properties.

<div class="row">
  <div class="col-md-6">
    {[ panel title:'Upcoming Staff Birthdays' icon:'fa fa-star' ]}
      {% person dataview:'96' where:'DaysUntilBirthday <= 21' sort:'DaysUntilBirthday' %}
        <table style="width:100%;">
          {% assign count = 0 %}
          {% for person in personItems %}
            {% assign count = count | Plus:1 %}
            <tr {% if person.DaysUntilBirthday == 0 %}style="font-weight:bold;"{%endif%}>
              {% capture bday %}{{ person.BirthDate | Date:'MMMM'}} {{person.BirthDate | Date:'d' | NumberToOrdinal }}{%endcapture%}
              <td valign="top">{{ person.FullName }}&nbsp;</td><td valign="top">{{bday}}</td>
            </tr>
          {% endfor %}
        </table>
        {% assign picwidth = 100 | DividedBy:count %}
        <table style="width:100%">
          <tr>
            {% for person in personItems %}
              <td width="{{picwidth}}%" align="center"><img src="{{ 'Global' | Attribute:'PublicApplicationRoot' }}{{ person.PhotoUrl }}" style="width:100%;max-width:100px; border-top-left-radius: 50%; border-top-right-radius: 50%; border-bottom-right-radius: 50%; border-bottom-left-radius: 50%; display: block; float: none;padding:5px;"></td>
            {% endfor %}
          </tr>
        </table>
      {% endperson %}
    {[ endpanel ]}
  </div>
  <div class="col-md-6">
    {[ panel title:'Upcoming Staff Wedding Anniversaries' icon:'fa fa-star' ]}
      {% person dataview:'97' where:'DaysUntilAnniversary <= 21' sort:'DaysUntilAnniversary' %}
        <table style="width:100%;"> 
          {% assign count = 0 %}
          {% for person in personItems %}
            {% assign count = count | Plus:1 %}
            <tr {% if person.DaysUntilAnniversary == 0 %}style="font-weight:bold;"{%endif%}>
              {% capture NumYears%}{{ person.AnniversaryDate | DateDiff:'Now','Y' }}{%endcapture%}
              {% capture AnnDay %}{{ person.AnniversaryDate | Date:'M/d/2000' }}{%endcapture%}
              {% capture Day %}{{ 'Now' | Date:'M/d/2000' }}{% endcapture %}
              {% assign NewYear = Day | DateDiff:AnnDay,'d' %}
              {%if NewYear < 0 %}
                {% assign NumYears = NumYears | Plus:1 %}
              {% endif %}
              {% capture anniversary %}<td valign="top">{{ person | FamilySalutation }}&nbsp;</td><td valign="top">{{ person.AnniversaryDate | Date:'MMMM'}} {{ person.AnniversaryDate | Date:'d' | NumberToOrdinal }} ({{ NumYears }})&nbsp;</td>{%endcapture%}
              {% if prevann == "" %}{% assign prevann = anniversary %}{% endif %}
              {% if prevann != anniversary %}
                {{anniversary}}
                {% assign prevann = anniversary %}
              {% endif %}
            </tr>
          {% endfor %}
        </table>
        {% assign picwidth = 100 | DividedBy:count %}
        <table style="width:100%">
          <tr>
            {% for person in personItems %}
              <td width="{{picwidth}}%" align="center"><img src="{{ 'Global' | Attribute:'PublicApplicationRoot' }}{{ person.PhotoUrl }}" style="width:100%;max-width:100px; border-top-left-radius: 50%; border-top-right-radius: 50%; border-bottom-right-radius: 50%; border-bottom-left-radius: 50%; display: block; float: none;padding:5px;"></td>
            {% endfor %}
          </tr>
        </table>
      {% endperson %}
    {[ endpanel ]}
  </div>
</div>

Advanced Update

If you know SQL and would like to add your staff work anniversaries too:
This uses an attribute for Hire date and is declared at the top of the SQL code. You need the attribute id.

{[ panel title:'Upcoming Staff Work Anniversaries' icon:'fas fa-briefcase' ]}
    {% sql %}
      DECLARE @HireDateAttributeId as datetime = 11565
      select p.NickName+' '+p.LastName as 'Name', av.[Value] as 'HireDate',av2.[Value] as 'TermDate',(FLOOR(DATEDIFF(dd,av.[Value],GETDATE()+300) / 365.25)) as 'NumYears', p.Id 
      from Person p
      inner join AttributeValue av on av.EntityId = p.Id and av.AttributeId = @HireDateAttributeId
      where 1 = (FLOOR(DATEDIFF(dd,av.[Value],GETDATE()+21) / 365.25))
      -
      (FLOOR(DATEDIFF(dd,av.[Value],GETDATE()) / 365.25)) and DATEDIFF(dd,av.[Value],GETDATE()) > 0 
      order by Month(av.[Value]),day(av.[Value])
      {% endsql %}
  <table style="width:100%;"> 
      {% assign count = 0 %}
      {% for item in results %}
      {% assign count = count | Plus:1 %}
      {% capture bday %}<td valign="top">{{ item.HireDate | Date:'MMMM'}} {{ item.HireDate | Date:'d' | NumberToOrdinal }} ({{ item.NumYears }})&nbsp;</td>{%endcapture%}
      {% assign hiremonth = item.HireDate | Date:'M' %}
      {% assign hireday = item.HireDate | Date:'d' %}
      {% assign curmonth = 'Now' | Date:'M' %}
      {% assign curday = 'Now' | Date:'d' %}
  <tr {% if hireday == curday && hiremonth == curmonth %}style="font-weight:bold;"{%endif%}>
  <td valign="top">{{ item.Name }}&nbsp;</td>{{bday}}
  </tr>
      {% endfor %}
  </table>
      {% assign picwidth = 100 | DividedBy:count %}
  <table style="width:100%">
  <tr>
      {% for item in results %}
      {% assign person = item.Id | PersonById %}
  <td width="{{picwidth}}%" align="center"><img src="{{ 'Global' | Attribute:'PublicApplicationRoot' }}{{ person.PhotoUrl }}" style="width:100%;max-width:100px; border-top-left-radius: 50%; border-top-right-radius: 50%; border-bottom-right-radius: 50%; border-bottom-left-radius: 50%; display: block; float: none;padding:5px;"></td>
      {% endfor %}
  </tr></table>
    {[ endpanel ]}