核心问题 -> 如何将 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>();
}
所以我猜我不知道如何构建这个类?也许?
所以我猜我不知道如何构建这个类?也许?
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"]
]
}