Создание меры PowerPivot в DAX для расчета отставания заявок - PullRequest
0 голосов
/ 24 января 2020

Я недавно начал работать с DAX в PowerPivot для Excel и PowerBI, и есть кое-что, чего я достиг с макросом Excel, и теперь я не могу заставить его работать с DAX. достичь на данный момент.

Мне нужно рассчитать открытые билеты за другие месяцы, которые входят в текущий месяц, общее количество билетов за другие месяцы, которые решаются в текущем месяце, и процентную долю билетов за эти Бэклоги, которые я решил в текущем месяце.

Я получаю свои данные по запросу SQL из базы данных MariaDB, и для этого случая наиболее релевантными полями являются Ticket, Creation Date и End Date.

enter image description here

Поэтому, когда я делал это в Excel, с помощью макроса я просто создал новую таблицу с дублирующимися значениями для каждого тикета, который попал в новый месяц. Например, я получил билет с августа 2019 года, и он был закрыт в январе 2020 года, поэтому в новой таблице я получил бы 5 записей для этого билета (сентябрь, октябрь, ноябрь, декабрь и январь). И для текущих открытых билетов я использовал текущую дату в качестве даты окончания. Таким образом, я создал сводную таблицу из полученных данных макроса и получил результаты, которые мне нужно было показать.

Это макрос:

Sub Backlog()

    Dim matrix As Variant
    Dim lRow As Long
    Dim lCol As Long
    Dim i As Integer
    Dim count As Integer
    Dim difm As Integer
    count = 0

    With ThisWorkbook.Sheets("Data")
        lRow = .Range("A" & .Rows.count).End(xlUp).Row
        lCol = .Cells(lRow, .Columns.count).End(xlToLeft).Column
        matrix = .Range(.Cells(2, 1), .Cells(lRow, lCol)).Value
    End With

    For lRow = LBound(matrix, 1) To UBound(matrix, 1)
        If matrix(lRow, 14) = vbNullString Then matrix(lRow, 14) = CDbl(Now())
        If IsNumeric(matrix(lRow, 13)) Then
            difm = DateDiff("m", CDate(matrix(lRow, 13)), CDate(matrix(lRow, 14)))
            If difm > 0 Then
                For i = 1 To difm
                    With ThisWorkbook.Sheets("Backlog")
                        .Range("A2").Offset(count, 0).Value = matrix(lRow, 1)
                        .Range("A2").Offset(count, 1).Value = matrix(lRow, 2)
                        .Range("A2").Offset(count, 2).Value = Format(DateAdd("m", i, matrix(lRow, 13)), "yyyy-mm-mmm")
                        .Range("A2").Offset(count, 3).Value = matrix(lRow, 9)
                        .Range("A2").Offset(count, 4).Value = matrix(lRow, 10)
                    End With
                    count = count + 1
                Next i
            End If
        End If
    Next lRow

End Sub

Это пример результирующие данные из макроса (я удалил дополнительные поля):

enter image description here

И из сводной таблицы я создал эту диаграмму:

enter image description here

Я знаю основы DAX и пробовал несколько вещей, связанных со своей таблицей календаря, но я не получил желаемых результатов. Я попытался измерить DAX, но я не получаю правильных результатов, возможно, это потому, что у меня есть две связи с моей календарной таблицей, одна из Creation Date и другая из End Date. Отношения с Creation Date являются активными, в то время как отношения с End Date неактивны. Поскольку я использую на оси иерархию дат из таблицы дат, возможно, она не рассчитывается так, как предполагалось, мера следующая:

Tickets backlog:=CALCULATE (
    COUNTA ( OtrsData[TicketID] );
    FILTER (
        OtrsData;
        DATEDIFF (
            OtrsData[Creation Date];
            IF ( ISBLANK ( OtrsData[End Date] ); TODAY (); OtrsData[End Date] );
            MONTH
        ) > 0
    )
)

Большое спасибо за помощь, которую вы можете оказать или любое руководство в правильном направлении. Если потребуется дополнительная информация, я предоставлю. Спасибо!

...