def METHOD_NAME(cls, analysis_property_views):
    """Get PropertyViews related to the AnalysisPropertyViews. If no PropertyView
    is found for an AnalysisPropertyView, the value will be None for that key.
    :param analysis_property_views: list[AnalysisPropertyView]
    :return: dict{int: PropertyView}, PropertyViews keyed by the related AnalysisPropertyView id
    """
    # build a query to find PropertyViews linked to the canonical property and cycles we're interested in
    property_view_query = models.Q()
    for analysis_property_view in analysis_property_views:
        property_view_query |= (
            models.Q(property_id=analysis_property_view.property_id)
            & models.Q(cycle_id=analysis_property_view.cycle_id)
        )
    property_views = PropertyView.objects.filter(property_view_query).prefetch_related('state')
    # get original property views keyed by canonical property id and cycle
    property_views_by_property_cycle_id = {
        (pv.property_id, pv.cycle_id): pv
        for pv in property_views
    }
    return {
        # we use .get() here because the PropertyView might not exist anymore!
        apv.id: property_views_by_property_cycle_id.get((apv.property_id, apv.cycle_id), None)
        for apv in analysis_property_views
    }