SSAS以编程方式创建表
我正在尝试创建一个SSAS表格模型,供Power BI Embedded使用,用于对使用EAV数据库的应用程序中的数据进行建模(参考:) 我已经成功地映射出了表集,使用M查询根据需要对表进行建模和透视。但我面临的问题是,我们的应用程序允许用户创建新实体,因此源数据是流动的 例如,假设数据有两个表:SSAS以编程方式创建表,ssas,ssas-tabular,Ssas,Ssas Tabular,我正在尝试创建一个SSAS表格模型,供Power BI Embedded使用,用于对使用EAV数据库的应用程序中的数据进行建模(参考:) 我已经成功地映射出了表集,使用M查询根据需要对表进行建模和透视。但我面临的问题是,我们的应用程序允许用户创建新实体,因此源数据是流动的 例如,假设数据有两个表: EntityTypes Car Boat Plane 这些实体属性保存在另一个表中: EntityID EntityType Attribute Value 1
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表,然后根据属性对表进行数据透视,以生成一个可用的表。事实表不应包含任何属性,它们应移动到自己的维度中。我将再次访问您的尺寸模型的设计。每个实体使用多个表的方法在概念上似乎是错误的。是的,我可能误解了,但是如果每个实体都应该移动到各自独立的维度中,我是否遇到过在源数据中创建新实体时如何自动创建新维度的问题?您不应该为新实体创建任何新表。您的模型可以有一个维度“实体”、一个维度“属性”和一个事实表,比如“实体配置”。后者将由实体键、属性键和值组成。将新实体或属性添加到源数据时,将更新模型的内容,但其结构保持不变。