我的 Python 代码和周期时间小部件之间的平均周期时间不同

问题描述 投票:0回答:1

我过去遇到过如何在周期时间小部件中计算平均周期时间的一些问题,因此我决定使用 Python 对其进行分析,看看是否找到任何方法来计算平均周期时间并获取循环时间小组件中显示的值相同。

我的问题是我无法达到周期时间小部件中显示的相同的平均周期时间值。

你们能帮我解决这个问题吗?

在撰写本主题时,周期时间小组件中显示的平均周期时间值为 12 天。

但是,使用 Python、Pandas 并连接 Feed OData API,我从未达到相同的值。我已经达到了 11 天的值,并且使用其他计算方法(例如移动平均线),我已经达到了 9 天或 11 天。我已经在我的帖子中提供了代码。

当使用 Power BI 并与 Feed OData API 连接时,按照此处指示的方式,我获得的平均周期时间值仍然是 11。

在撰写本主题时,我的目标值为 12 天。

这是我的代码 - 最初是在 Jupyter 笔记本中编写的:

# %%
import pandas as pd
import requests
import json
import base64
import math
from datetime import datetime, timedelta

# %%
token_do_azure = '{hidden}'
pat_encoded = base64.b64encode((":" + token_do_azure).encode()).decode()
headers = {
    'Content-Type': 'application/json',
    'Authorization': f'Basic {pat_encoded}'
}

# %%
hoje = datetime.today()

delta = timedelta(days=90)
dia_resultante = hoje - delta

dia_formatado = dia_resultante.strftime('%Y-%m-%dT00:00:00.00000Z')

print(dia_formatado)

url = rf"https://analytics.dev.azure.com/{hidden}/_odata/v4.0-preview/WorkItems?$select=WorkItemId,WorkItemType,Title,CycleTimeDays,ClosedDate&$filter=(Project/ProjectName eq 'Suporte_Torres' AND (WorkItemType eq 'Issue') AND State eq 'Done' AND ClosedOn/Date ge {dia_formatado})"

# %%
req = requests.get(url, headers=headers)
req_tabela = json.loads(req.text)
req_valores = req_tabela["value"]

# %%
df = pd.DataFrame(req_valores)
df['ClosedDate'] = pd.to_datetime(df['ClosedDate'], format='ISO8601').dt.date

# %%
print(round(df['CycleTimeDays'].mean(), 0))
# Returns 11.0, instead of 12.0.

# %%
# The moving average part of the code was written based on the moving average content of this page: https://learn.microsoft.com/en-us/azure/devops/report/dashboards/cycle-time-and-lead-time?view=azure-devops
def calcular_janela_n(n_dias):
    n = int(0.2 * n_dias)
    n = math.floor(n)
    if n % 2 == 0:
        n -= 1
    if n < 1:
        n = 1
    return n

janela_n = calcular_janela_n(90)

# %%
df['SMA_n'] = df['CycleTimeDays'].rolling(window=janela_n, min_periods=1).mean()
print(round(df['SMA_n'].tail(1).iloc[0], 0))
# Returns 9.0, instead of 12.0.
print(round(df['SMA_n'].mean(), 0))
# Returns 11.0, instead of 12.0.
python azure-devops powerbi odata azure-boards
1个回答
0
投票

我尝试使用如下所示的 OData 查询,它可以返回与“周期时间小部件”上相同的

CycleTimeDays

https://analytics.dev.azure.com/myOrg/myProj/_odata/v4.0-preview/WorkItems?
    $filter=WorkItemType eq 'Task'
        and StateCategory eq 'Completed'
        and CompletedDate ge 2024-01-20Z
        and startswith(Area/AreaPath,'myProj\myArea')
    &$select=WorkItemId,WorkItemType,Title,State,ClosedDate,CycleTimeDays,LeadTimeDays
    &$expand=Iteration($select=IterationPath),Area($select=AreaPath)

注:

OData 查询返回的

CycleTimeDays
的值是浮点数而不是整数。周期时间小部件上显示的值通常是四舍五入的。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.