按类别排名前 N

Top N by categories

我正在进行以下计算;我尝试了不同的解决方案,但无法获得所需的输出。 示例 table 如下所示,包含 ID、金额、类别、类型;

我有一个饼图,显示现金和信用卡的分配情况。此外,我创建了一个度量来确定每个类别的平均金额,如下所示。

AverageExpenseType = 
    AVERAGEX(
        SUMMARIZE('Data',
            'Data'[Category],
            "Total Spent", AVERAGE('Data'[Amount])),
        [Total Spent])

我需要创建一个 table,其中前 5 个 ID 的数量超过相应类别和类型的平均值。即当我在饼图中select现金时,平均需要根据现金或卡计算。

例如。现金类别 A 的平均值为 4710,输出如下所示,其中 ID 超过类别 A 和现金类型的平均值

您可以使用以下代码在 table 中创建自定义列-

category_type_wise_average = 

VAR current_category = pie_chart[category]
VAR current_type = pie_chart[type]

VAR category_wise_average = 
AVERAGEX(
    FILTER(
        pie_chart,
        pie_chart[category] = current_category
            && pie_chart[type] = current_type
    ),
    pie_chart[amount]
)

RETURN category_wise_average

现在,您将在每一行中获得类别和类型方面的平均值,如下图所示。您现在可以根据您的要求应用必要的过滤。

解决方案 2: 现在,如果您觉得在生成一个对每一行进行平均计算的自定义列时存在性能问题,您可以尝试使用下面的选项来获得相同的结果-

第一步: 使用下面的代码创建一个新的自定义 table-

pie_group_average = 

VAR sub_category_wise_total = 
GROUPBY (  
    pie_chart,
    pie_chart[category],
    pie_chart[type],
    "average",AVERAGEX(CURRENTGROUP(), pie_chart[amount])    
) 

RETURN
SELECTCOLUMNS (
    sub_category_wise_total,
    "category",pie_chart[category],
    "type",pie_chart[type],
    "average",[average] 
)

第 2 步: 现在在主table中创建一个自定义列,如下所示-

category_type_wise_average_2 = LOOKUPVALUE(
    pie_group_average[average],   
    pie_group_average[category],pie_chart[category],
    pie_group_average[type],pie_chart[type]
) 

此度量值现在将保留我们在使用自定义列的解决方案 1 中生成的相同值。

其他步骤:

第 3 步: 请创建另一个自定义列作为-

show_hide = 
IF(
    pie_chart[amount] >= pie_chart[category_type_wise_average_2], 
    1, 
    0
)

第四步: 添加这 2 个视觉级别过滤器,如下图所示-

逐步显示的数据变化如下-

希望对您有所帮助!