每月表格DAX分摊/范围预算

时间:2014-07-30 00:08:41

标签: sql-server ssas powerpivot dax

我有一个简单的PowerPivot工作簿,在一个表中有一些SalesTargets,这些是按月...通常是每月的第1个,以及日期维度。

我已经写了(通过很多痛苦)DAX查询来分配我们为了月份间报告而收集的每月目标(否则将没有目标数据)...

然而,我发现我的查询存在一些问题,我不知道如何解决这个问题,如果我试图仅在日级显示分配的目标值,那一天是工作日的事情。有点错......基本上没有任何层次结构显示,我不知道为什么:(

不知道为什么,我无法修复它......这是我目前的代码:

Measure :=
CALCULATE (
    SUMX (
        VALUES ( Dates[Date] ),
        CALCULATE (
            CALCULATE (
                SUM ( SalesTargets[Target] ),
                ALL ( Dates[Date] ),
                SUMMARIZE ( Dates, Dates[MonthName] )
            )
                / CALCULATE (
                    DISTINCTCOUNT ( Dates[Date] ),
                    ALL ( Dates[Date] ),
                    Dates[IsWorkingDay] = 1,
                    SUMMARIZE ( Dates, Dates[MonthName] )
                )
        )
    ),
    Dates[IsWorkingDay] = 1
)

代码试图在一个月级别对销售目标求和,然后将该数字除以IsWorkingDay = 1的日期总和

此过程是针对日期表的所有日期[日期](最低粒度)执行的,然后我尝试再次过滤IsWorkingDay = 1的日期。

如果我从代码中的两个区域删除工作日逻辑,一切正常......并且在几个月,几个季度和几年内卷起来没有问题..

我相信如果我明白这里的问题是什么,我就能解决它......我只是看不到它。

由于

1 个答案:

答案 0 :(得分:1)

以下是我最终选择的内容:

SalesTarget :=
CALCULATE (
    SUMX (
        VALUES ( Dates[Date] ),
        CALCULATE (
            CALCULATE (
                [Sum of Target],
                ALL ( 'Dates' ),
                SUMMARIZE ( Dates, Dates[MonthName], Dates[Year] )
            )
                / CALCULATE (
                    [Sum of IsWorkingDay],
                    ALL ( 'Dates' ),
                    SUMMARIZE ( 'Dates', 'Dates'[MonthName] )
                )
        )
    ),
    Dates[IsWorkingDay] = 1
)

请注意,此处唯一真正的区别是删除了IsWorkingDay = 1的独特天数

我注意到,当我将计算结果分成较小的一组时,这并没有给我正确的答案,因此在经过一段时间的游戏之后将其更改为其他内容。

在我的日期表中,IsWorkingDay是1或0的布尔字段,但您也可以使用以下内容执行此操作:

WorkingDays :=
CALCULATE (
    COUNTROWS ( 'Dates' ),
    ALL ( 'Dates' ),
    SUMMARIZE ( 'Dates', 'Dates'[MonthName] ),
    'Dates'[IsWorkingDay] = "Working Day"
)

希望这篇文章可以帮助某人:)