You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Cost Management QueryFilter中赋值'And'并筛选单日成本数据

如何筛选Azure Cost Management的单日成本数据并正确初始化QueryFilter的And集合?

核心问题与当前困境

  • 核心问题:如何筛选Azure Cost Management的单日成本数据?
  • 当前困境:QueryFilter的And字段为只读属性,无法直接赋值新List,导致构造多条件筛选失败。

背景场景

我基于Azure Function App开发了一个工具,用于查询100+个订阅的成本分析数据并导出到Azure Data Lake存储Blob。虽然Azure门户有内置导出功能,但存在两个痛点:一是无法高效部署和管理批量订阅的导出任务,新增订阅时扩展性差;二是内置导出最多支持WeekToDate时间范围,无法筛选单日数据。因此自行开发应用实现需求,但在构造QueryFilter时遇到了问题。

现有QueryDefinition初始化代码:

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

遇到问题的QueryFilter构造代码:

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,
};

错误提示

Property or indexer 'QueryFilter.And' cannot be assigned to -- it is read only

The logical "AND" expression. Must have at least 2 items.

查看QueryFilter类定义可知,And是只读属性,但构造函数已初始化了ChangeTrackingList集合:

/// <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>();
}

正确实现方法

由于And属性只读,不能直接赋值新List,需往构造函数初始化好的集合中直接添加元素;同时要修改时间范围配置实现单日数据筛选:

// 初始化QueryFilter实例
var queryFilter = new QueryFilter();

// 往And集合添加筛选条件(至少2个)
queryFilter.And.Add(new QueryFilter
{
    Dimensions = new QueryComparisonExpression("UsageDate", QueryOperatorType.Equal, new List<string> { "2024-05-20" })
});

queryFilter.And.Add(new QueryFilter
{
    Dimensions = new QueryComparisonExpression("SubscriptionId", QueryOperatorType.In, new List<string> { "sub-id-1", "sub-id-2" })
});

// 构造QueryDataset
var queryDataset = new QueryDataset
{
    Filter = queryFilter,
};

// 配置单日时间范围:改用Custom类型,设置左闭右开的时间区间
var queryDef = new QueryDefinition(
    ExportType.ActualCost,
    TimeframeType.Custom,
    queryFilter
)
{
    TimePeriod = new QueryTimePeriod
    {
        StartDate = DateTime.Parse("2024-05-20"),
        EndDate = DateTime.Parse("2024-05-21") // Cost Management时间范围为左闭右开,结束日期设为目标日期次日
    }
};

关键说明

  1. 只读集合操作:利用构造函数已初始化的ChangeTrackingList,通过Add方法添加子筛选条件,确保And集合元素数量≥2,符合API要求。
  2. 单日数据筛选:将TimeframeType改为Custom,通过TimePeriod指定精确的开始/结束日期(遵循左闭右开规则),即可获取单日成本数据。
  3. 批量订阅扩展:可通过配置文件或数据库批量读取订阅ID,动态添加到筛选条件中,新增订阅时仅需更新配置即可实现扩展,适配100+订阅的场景。

内容的提问来源于stack exchange,提问作者Tdawg90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:23:13