将行号/排名添加到ssas表格模型

将行号/排名添加到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

我试图在azure AnalysisServices表格模型中向计算表中添加行号(通过某些排序列)或至少是排名(我需要在
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,而不仅仅是实基表中存在的列