DAX |使用非活动(使用关系)覆盖活动过滤器

时间:2017-03-06 00:36:28

标签: dax tabular

我需要帮助创建DAX措施。这是Tabular立方体中的关系。 我有一个事实销售,初始日期,最终日期和产品表。

Relationship : Product -> Fact Sales (1 to Many, active)
Initial Date -> Fact Sales (1 to many, inactive relation)
Final Date - > Fact Sales(1 to many, active) 

Cube用作Power Bi工具的源。用户可以选择任何初始和最终日期来进行销售比较。

实际数据

Product|Date|Sales
Product1|20160101|100
Product1|20160102|110
Product1|20160131|200
Product2|20160101|78
.....

预期产出 过滤器:

product : Product1
Initial date : 20160101
Final Date : 20160131

Product | Initial Sales | Final Sales
Product1|100 |200

我创建了DAX测量AS

Initial Sales := CALCULATE(SUM(SALES),USERELATIONSHIP('Fact Sales'[Date],'Initial Date'[Date]))

但这项措施并未给我初步销售,因为它也按最终日期过滤。

提前致谢

1 个答案:

答案 0 :(得分:0)

您可以通过在DAX中使用FILTER函数来关联没有显式关系的表。

由于与Initial Date的{​​{1}}关系已被停用,因此您需要Fact Sales与过滤器中所选FILTER匹配的Fact Sales行。您可以使用Initial Date将正在评估的上下文与EARLIER中的每一行进行比较,并过滤正确的计算值。

使用这些措施:

Fact Sales

Initial Sales :=
IF (
    ISFILTERED ( InitialDate[InitialDate] ),
    CALCULATE (
        SUM ( FactSales[Sales] ),
        FILTER (
            ALL ( FactSales ),
            COUNTROWS (
                FILTER (
                    FactSales,
                    EARLIER ( FactSales[Date] ) = MAX ( InitialDate[InitialDate] )
                        && EARLIER ( FactSales[Product] ) = [Product]
                )
            )
        )
    ),
    BLANK ()
)

此表达式的工作原理如下,它汇总了Final Sales := IF ( ISFILTERED ( FinalDate[FinalDate] ), CALCULATE ( SUM ( FactSales[Sales] ), FILTER ( FactSales, [Date] = MAX ( FinalDate[FinalDate] ) ) ), BLANK () ) 列中Sales等于过滤器中所选Date的所有值。但是,根据您在Final DateFinal Date之间设置的关系,您可以轻松计算出这一点。

Fact Sales函数告诉我们过滤器是否选择了值,如果选择了值,则返回值,否则返回ISFILTERED

这是Power BI中的一个示例,因为我现在无法访问Excel。

enter image description here