虽然听起来好像我想将窗口功能添加到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_Number
,Suite_Name
和Group_Name
最高修订版行。
我想做同样的事情,但在Excel Power Pivot中使用DAX。
结果将是行号的计数,但是对于选定的(切片器)套件和组。
目标是将所有行选择到表格数据模型中,然后使用类似功能过滤记录并仅保留每个应用切片器的最新版本。
我到目前为止尝试过:CALCULATE
,FILTER
,TOPN
,RANKX
,GENERATE
。他们都没有帮助我 动态地 "排除"来自计算的行。
有人可以建议一种方法吗?
谢谢!
答案 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:
答案 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'
是维度表本身