首页 文章

具有Power View的DAX动态总计

提问于
浏览
4

我试图通过Power View绘制各个时间点所有账户余额的总和,以便我可以看到总数是如何变化的 .

我没有交易历史记录(加/减),只有每个帐户在特定时间点的“余额” .

我的数据的简化示例是:

账户日期余额a111 01 2015年1月100 a111 2015年2月1日150 b222 2015年3月1日200 c333 2015年3月1日300 b222 2015年5月1日150 d444 01 June 2015 400

据我所知,我需要创建一个度量来生成每个“帐户”的动态排名,按最新日期排序 . 然后,我应该能够创建第二个度量来SUM每个等级= 1的帐户 .

PowerPivot DAX - Dynamic Ranking Per Group (Min Per Group)问题中讨论过这个问题的类似例子,但我似乎无法在Power View中显示我想要的线图 .

我想在折线图上显示的是(让图表整理缺少的日期):

日期余额01 Jan 2015 100 - 仅限帐户a111 2015年2月1日150 - 仅限帐户a111,但新值01 2015年3月650 - 帐户a111(最新),b222和c333 2015年5月1日600 - 如上所述,但帐户b222已更新01 Jun 2015 1000 - 所有帐户的最新值

但是,我目前看到的是:

日期余额01 Jan 2015 100 - 与此日期对应的余额总和2015年2月1日150 - 如上所述2015年3月1日500 - 上述2015年5月1日150 - 以上01 Jun 2015 400 - 如上

据我所知,问题在于,在图中的每个数据点,“过滤器上下文”仅减少到与日期匹配的行,而我需要在该日期之前使用'等级为1 .

作为参考,我使用Excel 2013,数据最终通过Power Query(从SharePoint中提取数据)进入,所以如果有必要,我可以在那里工作(即生成一个数字'组ID'用于DAX MAX()功能,因为它似乎不喜欢字符串) .

我希望这不要混淆,并提前感谢任何帮助 .

1 回答

  • 1

    对此的解决方案是具有单独的日期维度表,因此可以在不考虑事实表的情况下每月独立地计算余额 .

    假设您有一个名为Date的日期表 .

    因此,首先要创建基本度量

    [Total Balance] := SUM( FactTable[Balance] )
    

    接下来,我们计算事实表中的第一个月,以用作查看Date表值的底线 .

    [First Ever Balance Date] := FIRSTDATE( ALL( FactTable[Date] ) )
    

    现在我们在上下文中确定最后一个日期,其中包含第一个月和当前月份之间的日期范围:

    [Last Balance Date] :=
    LASTNONBLANK (
        DATESBETWEEN ( Date[Date], [First Ever Balance Date], MAX ( Date[Month] ) ),
        [Total Balance]
    )
    

    因此,请考虑2015年5月1日当月的a111 . 此度量将查看2015年1月1日(我们的 [First Ever Balance Date] )和2015年5月1日( MAX Date[Month] )之间的所有日期,找到具有余额的最后一行并返回相应的 Date[Date] (2015年2月1日) .

    该指标将在账户初始余额之前的任何月份返回BLANK . 在日期过滤中使用BLANKS不起作用,因此我们应该使用[First Ever Balance Date]替换这些BLANK值,以确保该帐户的运行余额仍将返回0 .

    [Last Balance Date Remove Blanks] :=
    IF (
        ISBLANK ( [Last Balance Date] ),
        [First Ever Balance Date],
        [Last Balance Date]
    )
    

    现在,我们可以通过查看 Last Balance Date Remove Blanks 的余额来计算任何月份的任何帐户的当前余额

    [Last Balance] :=
    CALCULATE (
        [Total Balance],
        DATESBETWEEN ( Date[Date], [Last Balance Date Remove Blanks], 
        [Last Balance Date Remove Blanks] )
    )
    

    最后,我们在帐户中使用SUMX来累加各自的 Last Balance 金额 .

    [Account Total Balance] := SUMX( ALL( FactTable[Account] ), [Last Balance] )
    

    现在,您可以在数据透视表中将日期[月]放在行上,将[帐户总余额]作为度量 . 请注意,这将包括样本集中没有事实表行(例如4/1/2015)的月份 . 如果要排除这些,请添加另一个中间度量来计算事实表行:

    [Fact Table Row Count] := COUNTROWS ( FactTable )
    

    如果[Fact Table Row Count]为BLANK(),则创建一个返回BLANK()的度量,否则为[Account Total Balance]

    [Account Balance Hide Rows] :=
    IF (
        ISBLANK ( [Fact Table Row Count] ),
        BLANK (),
        [Account Balance]
    )
    

相关问题