Я недавно начал работать с DAX в PowerPivot для Excel и PowerBI, и есть кое-что, чего я достиг с макросом Excel, и теперь я не могу заставить его работать с DAX. достичь на данный момент.
Мне нужно рассчитать открытые билеты за другие месяцы, которые входят в текущий месяц, общее количество билетов за другие месяцы, которые решаются в текущем месяце, и процентную долю билетов за эти Бэклоги, которые я решил в текущем месяце.
Я получаю свои данные по запросу SQL из базы данных MariaDB, и для этого случая наиболее релевантными полями являются Ticket
, Creation Date
и End Date
.
Поэтому, когда я делал это в 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
Это пример результирующие данные из макроса (я удалил дополнительные поля):
И из сводной таблицы я создал эту диаграмму:
Я знаю основы 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
)
)
Большое спасибо за помощь, которую вы можете оказать или любое руководство в правильном направлении. Если потребуется дополнительная информация, я предоставлю. Спасибо!