DAX выпускает счетные записи с начальными и конечными датами за определенный период времени и фильтром - PullRequest
1 голос
/ 28 сентября 2019

У меня есть следующая таблица («Услуги») в PBI:

enter image description here

В таблице содержатся все услуги, предлагаемые клиенту.Служба имеет Start- и EndDate .

Что я пытаюсь сделать, это создать меру, для данной даты или датыrange, возвращает число различных CustomerID: s, получающих услугу в течение этого периода .

Некоторые примеры:

С учетом приведенной выше таблицы и диапазона дат между2019-01-01 и 2019-04-01 мера будет возвращать отличное значение 3 (совпадение для строк № 2, № 4 и № 5).

Предоставление единственной даты 2019-07-01мера будет возвращать отличное значение 3 (потому что строки # 1, # 2, # 3 и # 4 имеют период, заданный Start- и EndDate, совпадающим с этой датой).

В моем отчете мне также нужнобыть в состоянии фильтровать по ServiceTypeID .

Таблица определена следующим образом:

Services = 
DATATABLE (
    "CustomerID"; INTEGER;
    "ServiceTypeID"; INTEGER;
    "ServiceStartDate"; DATETIME;
    "ServiceEndDate"; DATETIME;
    {
        { 1; 10; "2019-06-03"; "2019-09-01"  };
        { 2; 12; "2019-01-01"; "2019-12-31"  };
        { 2; 10; "2019-05-01"; "2019-09-01"  };
        { 3; 8; "2019-02-01"; "2019-08-01"  };
        { 4; 10; "2019-03-30"; "2019-06-01"  }
    }
) 

Я попытался определить меру, как в коде ниже, , ноУ меня проблемы с фильтрацией по ServiceTypeID (мера просто показывает значение, как если бы я не применял фильтр для ServiceTypeID).

Number of active services =
CALCULATE (
    DISTINCTCOUNT ( 'Services'[CustomerID] );
    FILTER (
        ALLSELECTED ( 'Services' );
        (
            MIN ( 'DateTable'[Date] ) >= 'Services'[ServiceStartDate]
                && MIN ( DateTable[Date] ) <= 'Services'[ServiceEndDate]
        )
            || (
                MAX ( DateTable[Date] ) >= 'Services'[ServiceStartDate]
                    && MAX ( DateTable[Date] ) <= 'Services'[ServiceEndDate]
            )
    )
)

Кто-нибудь знает, что я здесь не так делаю?Любая помощь очень ценится.

С уважением, Питер

1 Ответ

0 голосов
/ 30 сентября 2019

Я предлагаю это решение:

Сначала вот модель:

enter image description here

Затем вы можете написать эту новую меру:

NumActservices = 
 // Retrieve the current date
Var VrCurrentDate = MAX(DateTable[Date])

// Retrieve active Acts filter per ServiceID Within the current date
Var VrServicesInPeriode =  
    CALCULATETABLE(
        Services;
        FILTER(
            ALLEXCEPT(Services;Service[ServiceTypeID]);
            Services[ServiceStartDate]<VrCurrentDate
            &&
            Services[ServiceEndDate]>=VrCurrentDate
        )
    )

// Count Disctinct customer belonging to the previous table
Var VrResult = CALCULATE(   
                    DISTINCTCOUNT(Services[CustomerID]);
                    VrServicesInPeriode
                )


RETURN
VrResult

Результат виден здесь:

enter image description here

...