如何在 Azure Costmanagment QueryFilter 中分配“And”值?

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

核心问题 -> 如何将 Azure CostManagment 成本结果过滤到 1 天的数据?

当前面临 -> 如何在 QueryFilter 中为 'And' 字段分配值?

我有一个 Azure Function App,它将查询多个订阅成本分析数据并将其导出到 Azure DataLakes blob。

我知道内置的门户导出选项,但我不知道如何为 100 多个订阅部署和管理此选项,并在启用新订阅时进行扩展。 此外,您没有功能将其过滤到最后一天。 最多是 WeekToDate。

该应用程序将与订阅一起部署,将结果过滤到单日等等..

现在介绍应用程序。

var queryDef = new QueryDefinition(
    ExportType.ActualCost,
    TimeframeType.WeekToDate,
    queryFilter
    );

方法简单, 然后定义 QueryDataset 是我遇到困难的地方。

    var queryFilter = new QueryFilter
    {
        And = new List<QueryFilter>                {
            new() {
                Dimensions = new QueryComparisonExpression("string", QueryOperatorType.In, new List<string>())
            },
            new()
            {
                Dimensions = new QueryComparisonExpression("string", QueryOperatorType.In, new List<string>())
            },
        }
    };

    var queryDataset = new QueryDataset
    {
        Filter = queryFilter,
    };

我不知道如何满足 QueryFilter 要求,

And = new List<QueryFilter>   

线路给了我错误

无法分配属性或索引器“QueryFilter.And”——它是只读的

但是在同样的错误中显示

逻辑“AND”表达式。必须至少有 2 件商品。

我在 QueryFilter 类中看到 And 字段实际上是只读的,

/// <summary> The logical "AND" expression. Must have at least 2 items. </summary>
public IList<QueryFilter> And { get; }

但是有一个构造函数

/// <summary> Initializes a new instance of QueryFilter. </summary>
public QueryFilter()
{
    And = new ChangeTrackingList<QueryFilter>();
    Or = new ChangeTrackingList<QueryFilter>();
}

所以我猜我不知道如何构建这个类?也许?

c# .net azure azure-resource-manager
1个回答
0
投票

所以我猜我不知道如何构建这个类?也许?

  • 在 Azure 成本管理的
    QueryFilter
    中,
    And
    属性是只读的,这意味着您无法像
    And = ...
    那样直接分配值。相反,您需要将项目添加到
    And
    列表,因为它是在构造函数中初始化的。您可以通过创建单独的
    QueryFilter
    实例并将它们添加到
    And
    列表来完成此操作。

代码:

// Create individual query filters
var filter1 = new QueryFilter
{
    Dimensions = new QueryComparisonExpression
    (
        "ResourceGroupName", // Dimension name
        QueryOperatorType.In,
        new List<string> { "YourResourceGroup1", "YourResourceGroup2" } // Values to filter
    )
};

var filter2 = new QueryFilter
{
    Dimensions = new QueryComparisonExpression
    (
        "ResourceType", // Another dimension name
        QueryOperatorType.In,
        new List<string> { "Microsoft.Compute/virtualMachines" }
    )
};

// Initialize the main filter and add these to the 'And' collection
var queryFilter = new QueryFilter();
queryFilter.And.Add(filter1);
queryFilter.And.Add(filter2);

// Now you can use this queryFilter in your query definition
var queryDataset = new QueryDataset
{
    Filter = queryFilter,
    Granularity = GranularityType.Daily // Optional: specify granularity
};

var queryDef = new QueryDefinition
{
    Type = ExportType.ActualCost,
    Dataset = queryDataset
};

// Now queryDef is ready to be used in the cost query.
  • And
    属性是
    QueryFilter
    对象的列表。它使用
    QueryFilter
    将各个
    And
    实例添加到
    Add()
    集合中。

  • 每个

    QueryFilter
    都可以包含基于维度的比较表达式(例如,
    ResourceGroupName
    ResourceType
    ),并且您可以使用
    In
    等运算符来过滤特定值。

这是您以 JSON 结构返回的结果,其中包含详细信息:

{
    "Columns": [
        {"Name": "ResourceGroupName", "Type": "string"},
        {"Name": "ResourceType", "Type": "string"},
        {"Name": "Cost", "Type": "number"},
        {"Name": "Date", "Type": "datetime"}
    ],
    "Rows": [
        ["YourResourceGroup1", "Microsoft.Compute/virtualMachines", 120.50, "2024-10-10"],
        ["YourResourceGroup2", "Microsoft.Compute/virtualMachines", 200.75, "2024-10-10"]
    ]
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.