将行号/排名添加到ssas表格模型
我试图在azure AnalysisServices表格模型中向计算表中添加行号(通过某些排序列)或至少是排名(我需要在将行号/排名添加到ssas表格模型,ssas,dax,ssas-tabular,azure-analysis-services,Ssas,Dax,Ssas Tabular,Azure Analysis Services,我试图在azure AnalysisServices表格模型中向计算表中添加行号(通过某些排序列)或至少是排名(我需要在TOPNSKIP中使用这个秩列,它应该是模型表中的预计算列。实际上,它不会只是一个排序列的预计算列。它将是一些我想要预计算的表达式)。我在这里使用了一些想法 我使用Visual Studio和Microsoft Analysis Services项目扩展将模型部署到SSA和SSM以调试请求。但SSM和表格模型定义中的dax请求之间似乎存在差异 SSMS使用evaluatesyn
TOPNSKIP
中使用这个秩列,它应该是模型表中的预计算列。实际上,它不会只是一个排序列的预计算列。它将是一些我想要预计算的表达式)。我在这里使用了一些想法
我使用Visual Studio和Microsoft Analysis Services项目扩展将模型部署到SSA和SSM以调试请求。但SSM和表格模型定义中的dax请求之间似乎存在差异
SSMS使用evaluate
syntaxis和表格式构造函数=VAR RETURN
。似乎有些函数不适用于表格式模型。似乎ADDCOLUMNS
和RANKX
不适用于表格式模型。此外,,
在SSMS中用作操作数分隔符和;
在模型DAX编辑器中,(可能是因为我的计算机上有一些国际化选项)这不是很方便。我找不到一种方法来获取模型定义的错误DAX请求的错误报告。我只看到在部署模型时检索到0条记录的错误请求,如果我尝试在部署后对表执行某些请求,我会收到错误消息,它是空的,因为构造不正确,但没有细节。在表构造过程中也可以使用计算列,但我无法将RANKX
函数嵌入到它们的公式中。此外,我不知道如何在构造函数中使用MEASURE
。所提到的stackoverflow问题的过滤方法在我看来非常缓慢我等了大约半个小时,停止了部署
因为我看不到ADDCOLUMNS
有效,所以我尝试了GENERATE
和SELECTCOLUMNS
。例如:
=
VAR NewTable = GENERATE(BaseTable; ROW("RowNumber"; RANKX(BaseTable; BaseTable[SortName];;1)))
RETURN NewTable
它在SSMS中运行良好,但不能用于构造表。而:
=
VAR NewTable = GENERATE(BaseTable; ROW("RowNumber"; 50))
RETURN NewTable
在任何地方都可以正常工作。因此我认为RANKX
在表格模型定义中不起作用
有没有办法通过某种排序列对ssas计算表中的行进行排序或编号?对于表格模型中的表,通常不建议添加高基数列(如索引编号列),因为这些列压缩非常严重,从而降低查询性能。尤其是当表较大时。但是如果如果不想将计算列添加到现有表中,可以将所有内容包装到ADDCOLUMNS调用中:
=
ADDCOLUMNS(
BaseTable,
VAR CurrentSortName = BaseTable[SortName]
RETURN
COUNTROWS(
FILTER(BaseTable, BaseTable[SortName] < CurrentSortName)
) + 1
)
=
添加列(
基本的,
VAR CurrentSortName=基表[SortName]
返回
计数行(
筛选器(BaseTable,BaseTable[SortName]
为什么需要添加行数列?您可以在直接使用…@Dan时指定排序顺序。这只是一个示例。在topnskip中,我可以只为一列添加排序顺序,或者使用一些表达式。我真的想做更复杂的排序,并希望预先计算。@Dan另外,我看不出如果OrderByEx,我可以使用skip参数pression是使用RANKX函数的eppression,而不仅仅是实基表中存在的列