在 Power BI 中显示前 10 名时获取占总数的百分比

时间:2021-03-18 07:06:11

标签: powerbi dax

我有一个包含 3 列日期、国家/地区和案例编号的表格。我想显示案例最多的前 10 个国家。我还想显示总计的百分比。当我选择显示值作为总计百分比的内置选项时,它会根据过滤掉的前 10 个值计算百分比。我需要的是,不是从过滤掉的 10 条记录中计算前 10 条记录的百分比,而是计算时间范围内过滤的所有值的百分比,而不是按案例过滤的前 10 条记录计算百分比

我有一个包含 100 多个国家/地区的大表格,因此我需要显示前 10 个国家/地区,但我需要显示每个国家/地区占总数的 %market。以下是虚拟数据。

还要补充一点,我的数据有过去 5 年的数据,但我正在处理过去 3/6 个月的滚动窗口。所以总计必须是过去 3/6 个月的。

enter image description here

2

这是全选时的市场份额

enter image description here

这是按案例过滤后的前 10 个国家

我需要的是,当我过滤掉前 10 个国家/地区时,我会得到市场份额,这是在所有记录都存在时计算得出的,即美国为 40% 的第二个图表。因此,基本上是第二张图中的前 10 个国家/地区,但是当我只想显示前 10 个国家/地区并像在第三张图中那样重新计算时,它不应该更改值。

1 个答案:

答案 0 :(得分:2)

编辑

使用您共享的表格,我创建了一个计算,该计算采用前 2 个国家/地区并计算了过去 3 个月的 Total Cases

总案例

Total Cases =
DISTINCTCOUNT ( 'Table'[Case Number] )

计算 1

计算只用了一张表。要强制每个国家/地区的过滤器上下文相同,我必须对变量 CALCULATETABLE 使用 ListOfDates

CaseTop10 =
VAR ListOfDates =
    CALCULATETABLE (
        DATESINPERIOD (
            'Table'[Created On],
            LASTDATE ( 'Table'[Created On] ),
            -3,
            MONTH
        ),
        ALL ( 'Table' )
    )
VAR TopCountries =
    SUMMARIZE (
        CALCULATETABLE (
            TOPN ( 2, ALL ( 'Table'[Country (Account)] ), [Total Cases], DESC ),
            ListOfDates
        ),
        [Country (Account)]
    )
VAR GTCases =
    DIVIDE (
        CALCULATE ( [Total Cases], ListOfDates ),
        CALCULATE ( CALCULATE ( [Total Cases], ListOfDates ), ALL ( 'Table' ) )
    )
RETURN
    IF (
        SELECTEDVALUE ( 'Table'[Country (Account)] ) IN TopCountries,
        GTCases,
        BLANK ()
    )

计算 2

为了简化计算最好创建一个日历表

CaseTop10 =
VAR ListOfDates =
    DATESINPERIOD ( 'Calendar'[Date], LASTDATE ( 'Calendar'[Date] ), -3, MONTH )
VAR TopCountries =
    SUMMARIZE (
        CALCULATETABLE (
            TOPN ( 2, ALL ( 'Table'[Country (Account)] ), [Total Cases], DESC ),
            ListOfDates
        ),
        [Country (Account)]
    )
VAR GTCases =
    DIVIDE (
        CALCULATE ( [Total Cases], ListOfDates ),
        CALCULATE ( CALCULATE ( [Total Cases], ListOfDates ), ALL ( 'Table' ) )
    )
RETURN
    IF (
        SELECTEDVALUE ( 'Table'[Country (Account)] ) IN TopCountries,
        GTCases,
        BLANK ()
    )

因此,您需要像这样创建日历表

Calendar =
CALENDAR ( MIN ( 'Table'[Created On] ), MAX ( 'Table'[Created On] ) )

并建立关系。

enter image description here

输出

这两个计算中的任何一个都会在右侧的表格中生成结果。

enter image description here