BIM转Power BI数据集

news2024/11/24 2:24:14

在本博客中,我们将了解如何使用从 SSAS 表格、Power BI Desktop 或 Power BI 服务数据集中提取的 Model.bim 文件在本地或 PBI 服务上生成新数据集。

1、设置(SSAS 表格和 PBI 服务通用)

我建议你创建一个专门用于此任务的新 Python 环境,因为它使用的库与另一个库发生冲突。

要创建虚拟环境,只需在特定文件夹中打开终端或 PowerShell 窗口并运行命令:

python -m venv pbi_env

完成此操作后,你需要激活环境 .\pbi_env\Scripts\activate 并安装 pythonnet 库,该库允许我们使用 .net Dlls。

如果你没有创建新的虚拟环境并且已经有 Clr 库,那么首先需要卸载它,然后安装 Pythonnet,否则你将收到运行时错误。

要在选择 IDE 时引用此环境,只需使用位于 C:\Users\antsharma\Downloads\Blog\pbi_env\Scripts\python.exe 的 python.exe 文件的路径

在 VS Code 中,你可以使用底部窗格中的选项设置 interperter:

只需输入python.exe的路径即可:

完成后,我们需要引用 2 个 DLL: Microsoft.AnalysisServices.Tabular 和 Microsoft.AnalysisServices 。

如果已经安装了 PBI Desktop 或 SSAS,那么你将在文件夹中找到它们: C:\Windows\Microsoft.NET\ assembly\GAC_MSIL

这是导入这些库的方式:

导入 Json 是因为 Model.bim 文件存储为 JSON 结构。

两者共同的下一部分是启动服务器、提供连接字符串并进行连接。

server.Databases.GetNewName 确保你不会用相同名称覆盖现有模型并每次创建一个新模型。 密码是你的 Windows 凭据。

2、创建 SSAS 表格数据库

因此,从这一点开始,事情将略有不同,因为 PBI Desktop 和 PBI Service 的 model.bim 与 SSAS Tabular 的 model.bim 不同,因为兼容性级别和默认 PowerBIDataSourceVersion 不同,因此你不能只将一个用于你需要的另一个 在部署之前编辑 model.bim 文件,稍后我将向你展示。

接下来我们需要 model.bim,现在它可以是你已经拥有的东西,也可以是你想要从现有数据库中提取的东西,使用表格编辑器提取现有数据库的 model.bim 文件,打开 TE 并连接到任何现有模型 并选择另存为并将文件保存在某处

创建一个新变量:

bim_file = r"C:\ Users \ antsharma \ OneDrive \ Desktop \ Contoso Import.bim"

接下来我们将使用之前导入的json库打开这个bim文件:

我打开该文件并用新名称替换了 id 和名称,以便每次运行代码时都会创建一个新数据库。

现在的问题是,如果我们使用 Python 读取 JSON,JSON 结构将被转换为表格模型脚本语言不支持的等效 Python 结构,因此我们需要将其转换回原始格式以及反序列化数据库以将 JSON 字符串到对象,之后我们需要做的就是生成 TMSL 脚本并执行它。

SSAS表格版本的完整代码:

import json
import clr

folder = r"C:\Windows\Microsoft.NET\assembly\GAC_MSIL"

clr.AddReference(folder + r"\Microsoft.AnalysisServices.Tabular\v4.0_15.0.0.0__89845dcd8080cc91\Microsoft.AnalysisServices.Tabular.DLL")

clr.AddReference(folder + r"\Microsoft.AnalysisServices\v4.0_15.0.0.0__89845dcd8080cc91\Microsoft.AnalysisServices.DLL")

import Microsoft.AnalysisServices as AS
import Microsoft.AnalysisServices.Tabular as Tabular

workspace = "domain\servername"
username = 'domain\username'
password = '*****************'
conn_string = f"DataSource={workspace};User ID={username};Password={password};"

server = Tabular.Server()
server.Connect(conn_string)
new_dataset_name = server.Databases.GetNewName('SSAS Tabular Model w Python')

bim_file = r"C:\Users\antsharma\OneDrive\Desktop\Contoso Import.bim"

with open(bim_file) as bim:
    json_file = json.load(bim)
    json_file['id'] = new_dataset_name
    json_file['name'] = new_dataset_name


raw_json = json.dumps(json_file, indent=4)

db = AS.JsonSerializer.DeserializeDatabase(
    raw_json, 
    DeserializeOptions = 'default', 
    CompatibilityMode = 'Analysis Services'
)
# Compatibility Modes:
    # Analysis Services = 1 (Basic AnalysisServices mode - used on SSAS and AAS)
    # Excel PowerPivot = 4
    # PowerBI = 2
    # Unknown = 0

script = Tabular.JsonScripter.ScriptCreateOrReplace(db)
server.Execute(script)
server.Disconnect()

如果转到服务器,你将看到新数据库已创建,我们已将 Contoso Import 复制到另一个数据库。

现在你只需要处理它。

3、创建 Power BI 数据集

我们只需对代码进行很少的更改。

workspace = "powerbi://api.powerbi.com/v1.0/myorg/Your Workspace" 
# ^ XMLA Endpoint
username = 'your login id form PBI Service'
password = 'your PBI Service password'

前面我提到过,不同类型的 Analysis Services 的 model.bim 文件存在差异,因此,如果您有来自 SSAS Tabular 的 model.bim,则可以进行少量更改并使其适用于 PBI 数据集。

我将使用上一个示例中使用的 model.bim 并从中创建一个数据集。

所以当我们打开model.bim时我们实际上可以将其修改为:

with open(bim_file) as bim:
    json_file = json.load(bim)
    json_file.update({'compatibilityLevel':1571})
    json_file['id'] = new_dataset_name
    json_file['name'] = new_dataset_name
    json_file['model']['defaultPowerBIDataSourceVersion'] = "powerBI_V3"

上面的代码更改了兼容性以及默认的PowerBIDataSourceVersion。

你需要进行的另一个更改是 CompatibilityMode:

db = AS.JsonSerializer.DeserializeDatabase(raw_json, DeserializeOptions = 'default', CompatibilityMode = 'PowerBI')

# Compatibility Modes:
    # Analysis Services = 1
    # Excel PowerPivot = 4
    # PowerBI = 2
    # Unknown = 0

完成后运行代码,你将看到数据集已创建,如果多次运行它,它将添加后缀 1、2、3 等。

完成后,只需将正确的数据源映射到网关即可。

PBI数据集版本的完整代码:

import json
import clr

folder = r"C:\Windows\Microsoft.NET\assembly\GAC_MSIL"

clr.AddReference(folder + 
r"\Microsoft.AnalysisServices.Tabular\v4.0_15.0.0.0__89845dcd8080cc91\Microsoft.AnalysisServices.Tabular.DLL")

clr.AddReference(folder +
r"\Microsoft.AnalysisServices\v4.0_15.0.0.0__89845dcd8080cc91\Microsoft.AnalysisServices.DLL")

import Microsoft.AnalysisServices as AS
import Microsoft.AnalysisServices.Tabular as Tabular

workspace = "powerbi://api.powerbi.com/v1.0/myorg/Your Workspace" 
username = 'your login id form PBI Service'
password = 'your PBI Service password'
conn_string = f"DataSource={workspace};User ID={username};Password={password};"

server = Tabular.Server()
server.Connect(conn_string)
new_dataset_name = server.Databases.GetNewName('Power BI Dataset w Python')

bim_file = r"C:\Users\antsharma\OneDrive\Desktop\Contoso Import.bim"

with open(bim_file) as bim:
    json_file = json.load(bim)
    json_file.update({'compatibilityLevel':1571})
    json_file['id'] = new_dataset_name
    json_file['name'] = new_dataset_name
    json_file['model']['defaultPowerBIDataSourceVersion'] = "powerBI_V3"


raw_json = json.dumps(json_file, indent=4)

db = AS.JsonSerializer.DeserializeDatabase(raw_json, DeserializeOptions = 'default', CompatibilityMode = 'PowerBI')
# Compatibility Modes:
    # Analysis Services = 1
    # Excel PowerPivot = 4
    # PowerBI = 2
    # Unknown = 0

script = Tabular.JsonScripter.ScriptCreateOrReplace(db)
server.Execute(script)
server.Disconnect()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1564794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker部署DOS游戏

下载镜像 docker pull registry.cn-beijing.aliyuncs.com/wuxingge123/dosgame-web-docker:latestdocker-compose部署 vim docker-compose.yml version: 3 services:dosgame:container_name: dosgameimage: registry.cn-beijing.aliyuncs.com/wuxingge123/dosgame-web-docke…

微软云学习环境

微软公有云 - Microsoft Azure 本文介绍通过微软学习中心Microsoft Learn来免费试用Azure上的服务,也不需要绑定信用卡。不过每天只有几个小时的时间。 官网 https://docs.microsoft.com/zh-cn/learn/ 实践 比如创建虚拟机,看到自己的账号下多了Learn的…

常量分类、常量优化

常量分类 常量,程序运行期间,不发生改变的量 整型常量:100,200,-300等浮点型常量:100.0,-3.14,0.0等布尔常量:只有true、false两个取值字符常量:英文单引号…

linux设置Nacos自启动

前提:已经安装好nacos应用 可参考:Nacos单机版安装-CSDN博客 1. 创建nacos.service 1.1 在 /lib/systemd/system 目录底下,新建nacos.service文件 [Unit] Descriptionnacos Afternetwork.target[Service]Typeforking# 单机启动方式&#…

javascript常见的事件属性

焦点事件 focus/blur <input type"text" /><script>const input document.querySelector("input")// 绑定焦点事件input.addEventListener("focus" ,function(){console.log("有焦点触发")})// 失去焦点事件input.addEve…

RIP协议(路由信息协议)

一、RIP协议概述 RIP协议&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种基于距离矢量的内部网关协议&#xff0c;即根据跳数来度量路由开销&#xff0c;进行路由选择。 相比于其它路由协议&#xff08;如OSPF、ISIS等&#xff09;&#…

SpringBoot(48)-使用 SkyWalking 进行分布式链路追踪

Spring Boot&#xff08;48&#xff09;- 使用 SkyWalking 进行分布式链路追踪 介绍 在分布式系统中&#xff0c;了解各个服务之间的调用关系和性能表现是非常重要的。SkyWalking 是一款开源的分布式系统监控与分析平台&#xff0c;能够帮助我们实现分布式系统的链路追踪、性…

24/04/02总结

API: bigdecima: 方法名 说明 public static BigDecimal valueof( double val) 静态获取对象 public BigDecimal add(BigDecimal val) 加法 public BigDecimal subtract(BigDecimal val…

从C到C++过渡知识 下(深入理解引用与指针的关系)

引用 引用时C引入的一个新的概念&#xff0c;他和指针有着千丝万缕的关系。 首先我们要了解的是引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。语法格式如下…

hibernate session接口

hibernate session接口 Session接口是hibernate向应用程序提供的操纵数据库的最主要的接口&#xff0c;提供了保存、更新、删除和加载Java对象的方法。 session具有一个缓存&#xff0c;位于缓存中的对象成为持久化对象&#xff0c;和数据库中的相关记录对应。session能够在某些…

智能视频翻译和配音处理工具:Pyvideotrans

pyVideoTrans&#xff1a;一键字幕识别翻译配音带新语言字幕和配音的视频 - 精选真开源&#xff0c;释放新价值。 概览 Pyvideotrans是一款卓著的智能化视频处理系统&#xff0c;专精于视频翻译与配音艺术&#xff0c;以其卓越的技术实力实现对原始视频中音频信息的精准捕捉、…

CCIE-03-Layer2-LAN-TS

目录 实验条件网络拓朴实验目标 开始排错问题1. SW2上的DHCP中继没有配置正确问题2. SW1/SW2的SVI接口被关闭问题3. 安全端口配置了不同的MAC地址 实验条件 网络拓朴 Output1 Output2 实验目标 排除故障使得PC101访问Server1时符合图片中给出的Output 开始排错 根据要求…

并发编程01-深入理解Java并发/线程等待/通知机制

为什么我们要学习并发编程&#xff1f; 最直白的原因&#xff0c;因为面试需要&#xff0c;我们来看看美团和阿里对 Java 岗位的 JD&#xff1a; 从上面两大互联网公司的招聘需求可以看到&#xff0c; 大厂的 Java 岗的并发编程能力属于标配。 而在非大厂的公司&#xff0c; 并…

基于栈结构的非递归二叉树结点关键字输出算法

基于栈结构的非递归二叉树结点关键字输出算法 一、引言二、二叉树基本概念三、非递归遍历算法基础四、算法设计五、算法实现六、C代码示例七、算法分析八、优化与讨论 一、引言 在计算机科学中&#xff0c;二叉树是一种重要的数据结构&#xff0c;它广泛应用于各种算法和数据结…

笔记: javaSE day17天笔记

第十七天课堂笔记 Java常用类 数学类★★★ math java.lang.Math , 数学类 round(x) : 四舍五入 , 把 x加0.5 后向下取整 ceil(x) : 返回大于等于x的最小整数 , 向上取整 floor(x) : 返回小于等于x的最大整数 , 向下取整 sqrt(x) : 平方根 cbrt(x): 立方根 pow(a , b)…

App应用的服务器如何增加高并发能力

大家好&#xff01;我是你们的好朋友咕噜铁蛋&#xff01;近年来&#xff0c;随着移动互联网的蓬勃发展&#xff0c;各类App应用如雨后春笋般涌现&#xff0c;用户量呈现爆发式增长。然而&#xff0c;随之而来的高并发访问问题也开始频繁出现&#xff0c;给服务器带来了极大的挑…

ecology9.0通过自定义按钮给明细表某字段赋值

功能&#xff1a;把主表字段赋值给明细表字段 核心代码&#xff1a; <script>jQuery(document).ready(function(){$(#setcgy).click(function(){var cgy_txt WfForm.getBrowserShowName("field1207");debuggervar cgy WfForm.getFieldValue("field1207…

java(5)之数组

1、什么是数组 数组就是用来储存相同数据类型的数据集合&#xff0c;可使用共同的名称来引用数组中的数据&#xff0c;数组的类型有很多种&#xff0c;但是指定了数组的类型就只能存储这一类数据。 2、数组的特点 1、既能存储原始数据也能催出对象类型 2、长度一旦确定就不…

MySQL进阶-----SQL提示与覆盖索引

目录 前言 一、SQL提示 1.数据准备 2. SQL的自我选择 3.SQL提示 二、覆盖索引 前言 MySQL进阶篇的索引部分基本上要结束了&#xff0c;这里就剩下SQL提示、覆盖索引、前缀索引以及单例联合索引的内容。那本期的话我们就先讲解SQL提示和覆盖索引先&#xff0c;剩下的内容就…

ssm 设备采购管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 设备采购管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…