DAX的SQL分析功能

时间:2016-05-25 07:22:25

标签: sql-server powerpivot window-functions dax

虽然听起来好像我想将窗口功能添加到powerpivot表中,但我不是......我想根据窗口函数排除记录。

我有类似这样的查询(SQL Server):

Select  Line_Number, 
        Suite_name, 
        Group_Name, 
        Revision, 
        Status 
FROM (
    select  Line_Number, 
            Suite_Name, 
            Group_Name, 
            Revision, 
            Status, 
            Row_Number() OVER (Partition by Line_Number, Suite_Name, Group_Name order by Revision Desc) r
    From TableA 
    ) t
where t.r = 1

此查询返回每Line_NumberSuite_NameGroup_Name最高修订版行。

我想做同样的事情,但在Excel Power Pivot中使用DAX。

结果将是行号的计数,但是对于选定的(切片器)套件和组。

目标是将所有行选择到表格数据模型中,然后使用类似功能过滤记录并仅保留每个应用切片器的最新版本。

我到目前为止尝试过:CALCULATEFILTERTOPNRANKXGENERATE。他们都没有帮助我 动态地 "排除"来自计算的行。

有人可以建议一种方法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

建议可以使用计算列来查找最大修订值,使用较早的函数。 如果您想在一系列修订版上使用动态过滤器,则无法使用此功能。

calc_column01:=CALCULATE(max(myTable[revision]),filter(myTable,myTable[line_number]=EARLIER(myTable[line_number])&&myTable[suite_name]=earlier(myTable[suite_name])))

然后添加一个measure01:=CALCULATE(VALUES(myTable[status]),filter(ALLSELECTED(myTable),myTable[revision]=max(myTable[calc_column01])))

powerpivot window

采样并产生powerpivot:

result

答案 1 :(得分:0)

看来我做得对,但在探索解决方案时,我意识到有时细胞参考不能完成工作,所以我必须分3个步骤。 此外,为了减少我的问题的复杂性,我没有提到我也有很多表。 一些代码示例:

Last rev:=CALCULATE(MAX(REV), 'TABLE B', 'TABLE C')

现在,当我第一次尝试做事时,这就是代码的样子:

Total Lines:=CALCULATE(COUNTROWS(TABLE A), 'TABLE B', 'TABLE C', FILTER(ALLSELECTED(TABLE A[REV]), [REV] = Last Rev))

不幸的是,这不起作用,所以我不得不将代码更新为:

Total Lines:=CALCULATE(COUNT('TABLE A'[REV]), 'TABLE B', 'TABLE C', FILTER(ALL('TABLE A'[REV]), [REV] = CALCULATE(MAX(REV), 'TABLE B', 'TABLE C')))

只有这样我过去的过滤器才真正完成了这项工作。 完成此操作后,我仍然必须正确处理汇总,因此我将Total Lines度量用另一个总和表达式包装,否则我只得到" 1": Total:=SUMX(VALUES('Table A'[LINE_NUMBER]),[Total] )

有关'Table B''Table C'的更多信息:这些是多对多的表,'Table B'是中间表,'Table C'是维度表本身