首页 > 解决方案 > DAX 动态日期平均值

问题描述

我正在尝试创建一个单独的度量来计算日期平均值,具体取决于时间条形图上的向下钻取。

条形图在层次结构中有 5 个时间段。年 - 季度 - 月 - 周 - 日

当我钻取条形图时,我想要一个可以动态计算年平均 - 季度平均 - 月平均、周平均、每日平均的度量。

例如,假设条形图位于年份级别并显示代表 2016-2019 的 4 个条形图。度量值将是 COUNT(UnitID) / 4,因为 X 轴上当前显示 4 个条形。

让我们深入到 2018 年的月份级别。有 12 个条形图代表 1 月至 12 月。度量值将是 COUNT(2018 UnitIDs) / 12,因为 X 轴上当前显示 12 个条形。

让我们深入到 2019 年的月份级别。只有 10 个柱代表 1 月至 10 月。度量值将是 COUNT(2019 UnitIDs) / 10,因为 X 轴上当前仅显示 10 个柱。

最后,我们不要向下钻取,而只是逐年扩展层次结构。我们从显示 4 个柱的年度视图转到显示 12 个柱的月视图。但 1 月的总数是 2016Jan + 2017Jan + 2018Jan + 2019Jan 的总和。该度量需要将其解释为 COUNT(All UnitIDs) / 12,因为 X 轴上当前显示了 12 个月。

我基本上是想弄清楚如何创建一个度量,该度量在任何给定时间计算 X 轴上的任何数量的值。

谢谢大家的建议和反馈。我真的很期待测试您的回复并查看它们是否有效!

标签: powerbidax

解决方案


听起来您正在寻找一种方法来为每年、每季度、每月等显示相同的值。

图1

我想知道这作为一种视觉效果会有什么意义,但如果是这样的话,你的度量就会是这样的。

Average Count UnitIDs in Drilldown Periods = 

-- At which level the report is drilled down?
VAR CalendarDrilldownLevel = 
IF(ISFILTERED('Calendar'[Day]), "Day",
    IF(ISFILTERED('Calendar'[Week]), "Week",
        IF(ISFILTERED('Calendar'[Month]), "Month",
            IF(ISFILTERED('Calendar'[Quarter]), "Quarter",
                IF(ISFILTERED('Calendar'[Year]), "Year", "None")))))

-- Total count of UnitIDs in the entire period
VAR TotalCount = CALCULATE([Count of Unit IDs], ALLSELECTED('Calendar'))

-- Number of years, quarters, months, etc. based on the drilldown level
VAR CountOfPeriods = CALCULATE(
    SWITCH(
        CalendarDrilldownLevel,
        "Year", DISTINCTCOUNT('Calendar'[Year]),
        "Quarter", COUNTROWS(
            DISTINCT(
                SELECTCOLUMNS(
                    'Calendar',
                    "Year", 'Calendar'[Year],
                    "Quarter", 'Calendar'[Quarter]
                )
            )
        ),
        "Month", COUNTROWS(
            DISTINCT(
                SELECTCOLUMNS(
                    'Calendar',
                    "Year", 'Calendar'[Year],
                    "Quarter", 'Calendar'[Quarter],
                    "Month", 'Calendar'[Month]
                )
            )
        ),
        -- Similar lines follow for weeks, days, and in case of no drill down.
    ),
    ALLSELECTED('Calendar')
)

RETURN DIVIDE(TotalCount, CountOfPeriods)

也许您正在尝试在视觉中显示平均线?在这种情况下,您可以定义一个简单的度量,例如COUNT('Your Table'[UnitID])在柱形图视觉设置中添加一条平均线。(您可以在分析部分找到)

图2


推荐阅读