1

我正在研究 SQL Server 表格模型。
我很难将 MDX 方程转换为 DAX 方程。

我想使用以下计算显示每个月的 PC 计数变化率(增量或减量)。
(当月 PC 计数 - 上月 PC 计数)/ 上月 PC 计数

这是 MDX 方程,它在多维模型中运行良好。
[PC Count] 是最后一个非空值。

(([Date].[Fiscal QTR].CURRENTMEMBER, [Measures].[PC Count])
-
([Date].[Fiscal QTR].PREVMEMBER, [Measures].[PC Count]))
/
([Date].[Fiscal QTR].PREVMEMBER, [Measures].[PC Count])

我为当前月份的 PC 计数做了一个 DAX 方程

PC Count:=
CALCULATE(
    SUM([PC Count]),
    FILTER(Time, Time[DateKey] = MAX(vwFact_PCCount[DateKey]))
)

这在网格视图(SSDT)和性能点中运行良好。但是上个月 PC 计数的以下 MDX 方程在网格视图(SSDT)中运行良好,但是当我在底部轴(月)时,这个方程在性能点中显示错误。

Previous Month Count:=CALCULATE(
    SUM([PC Count]),
    FILTER(Time, Time[DateKey] = FORMAT(DATE(LEFT(Max(vwFact_PCCount[DateKey]),4),
                                             RIGHT(LEFT(Max(vwFact_PCCount[DateKey]),6),2)
                                             ,1)-1
                                        , "yyyyMMdd") *1)
)

我不知道我的上个月计数方程有什么问题。如何使用 DAX 获得此结果?

4

1 回答 1

1

您的“当前月份 PC 计数”表达式的编写方式始终是表中最近的月份。这与您在帖子中显示的 MDX 代码不同。

MDX - 当月 PC 计数

([Date].[Calendar Month].CURRENTMEMBER, [Measures].[PC Count])

DAX - 当月 PC 计数

SUM('table name'[PC Count])

在 DAX 中,“当前”的概念是上下文相关的……请参阅MSDN 论坛上的此线程以获得很好的讨论。

这是一个示例,显示了使用 AdventureWorksDW2012 数据集在 DAX 中的当前/先前情况:

DEFINE
    MEASURE 'Internet Sales'[SalesAmount_CurrMth] = 
        'Internet Sales'[Internet Total Sales]
    MEASURE 'Internet Sales'[SalesAmount_PrevMth] = 
        CALCULATE (
             'Internet Sales'[SalesAmount_CurrMth]
            ,PREVIOUSMONTH('Date'[Date])
        )
EVALUATE (
    FILTER(
        ADDCOLUMNS (
            SUMMARIZE (
                'Date'
                ,'Date'[Calendar Year]
                ,'Date'[Month Name]
            )
            ,"Current Month", 'Internet Sales'[SalesAmount_CurrMth]
            ,"Prior Month", 'Internet Sales'[SalesAmount_PrevMth]
        )
        ,'Internet Sales'[SalesAmount_CurrMth] <> BLANK()
    )
)

尝试这个...

Previous Month Count :=
CALCULATE (
     SUM('<insert table name here>'[PC Count])
    ,DATEADD('Date'[Date],-1, MONTH)
)
于 2013-01-08T14:12:45.910 回答