SSAS以编程方式创建表

SSAS以编程方式创建表,ssas,ssas-tabular,Ssas,Ssas Tabular,我正在尝试创建一个SSAS表格模型,供Power BI Embedded使用,用于对使用EAV数据库的应用程序中的数据进行建模(参考:) 我已经成功地映射出了表集,使用M查询根据需要对表进行建模和透视。但我面临的问题是,我们的应用程序允许用户创建新实体,因此源数据是流动的 例如,假设数据有两个表: EntityTypes Car Boat Plane 这些实体属性保存在另一个表中: EntityID EntityType Attribute Value 1

我正在尝试创建一个SSAS表格模型,供Power BI Embedded使用,用于对使用EAV数据库的应用程序中的数据进行建模(参考:)

我已经成功地映射出了表集,使用M查询根据需要对表进行建模和透视。但我面临的问题是,我们的应用程序允许用户创建新实体,因此源数据是流动的

例如,假设数据有两个表:

EntityTypes
Car
Boat
Plane
这些实体属性保存在另一个表中:

EntityID    EntityType  Attribute       Value
1           Car         #Seats          4
1           Car         Transmission    Manual
1           Car         Make            Ford
2           Car         Make            Honda
2           Car         Transmission    Auto
3           Boat        #Engines        2
3           Boat        Berths          4
4           Plane       EngineType      Jet
4           Plane       Manufacturer    Boeing
5           Boat        #Engines        2
6           Plane       #Engines        4
虽然我可以通过旋转在SSAS中创建汽车表、船表和平面表,但我面临的问题是,当应用程序用户创建新实体时,如何在模型中创建新表来处理更改?我试图避免我们的支持团队中有人需要在任何时候编辑SSAS模型

是否有人知道在SSAS模型中动态创建表的方法,以便在处理时,如果EntityType表中出现新行,则在模型中创建新表


我目前的理论是在SSI中拆分EAV表,并在循环中使用TMSL来创建模型表,但我想在我消失在兔子洞里几天之前先检查一下。

避免讨论允许用户动态地向模型添加表和数据是否是一个好主意,你的问题的答案如下:

当然!假设您使用的是SQL Server 2016(或更高版本),有几种方法可以通过编程方式更改模型(添加表、删除列、更改度量表达式等)


您可以使用PowerShell、C#或SSIS中的脚本任务,通过TMSL或TOM将实际更改应用于模型。

为什么需要为每个实体创建单独的表?这毫无意义。只需创建一个星型模式,就完成了。保留一个公共事实表的主要问题是,一旦你对我正在使用的实际表进行透视,就会有200多列,因为为实体创建的所有属性都会在同一个表中。在每一行上,大多数字段都是空的。我目前的导入过程是,每个表都按EntityType列过滤EAV表,然后根据属性对表进行数据透视,以生成一个可用的表。事实表不应包含任何属性,它们应移动到自己的维度中。我将再次访问您的尺寸模型的设计。每个实体使用多个表的方法在概念上似乎是错误的。是的,我可能误解了,但是如果每个实体都应该移动到各自独立的维度中,我是否遇到过在源数据中创建新实体时如何自动创建新维度的问题?您不应该为新实体创建任何新表。您的模型可以有一个维度“实体”、一个维度“属性”和一个事实表,比如“实体配置”。后者将由实体键、属性键和值组成。将新实体或属性添加到源数据时,将更新模型的内容,但其结构保持不变。