BIM转Power BI数据集

在本博客中,我们将了解如何使用从 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 clrfolder = 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 Tabularworkspace = "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_namejson_file['name'] = new_dataset_nameraw_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 = 0script = 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_namejson_file['name'] = new_dataset_namejson_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 clrfolder = 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 Tabularworkspace = "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_namejson_file['name'] = new_dataset_namejson_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 = 0script = Tabular.JsonScripter.ScriptCreateOrReplace(db)
server.Execute(script)
server.Disconnect()

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

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

相关文章

old photo老照片图像复原数据集

来源 本来想拿DA-CLIP 训练一下old photo,训练代码没成功,毕设没时间就不研究了 github搜old photo复原论文原作者好像没开源训练数据集,所以用了这个SynOld 训练集500对测试集200对 但是readme写的很差,其他什么也没交代 展示…

Centos-Linux安装部署MySQL-8.0

linux搭建mysql 1.使用系统的root账户 2.切换到 /usr/local 目录下 3.下载mysql wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz也可以直接在官方下载最新版本 官方下载 选择linux 4.解压mysql tar xvJf mysql-8.0.21-l…

C易错注意之const修饰指针,含char类型计算,位段及相关经典易错例题

目录 前言 一:const修饰指针 1.const修饰变量 2.const 修饰指针 1.const int*p&m; 2. int* const p&m; 3. int const *p&m; 4. int const *const p&m; 5.总结 总之一句话为:左定值有定向 二:关于计算中char类型…

C语言:动态内存管理(二)

目录 前言 1.3 realloc​编辑 3、常见动态内存管理错误 3.1 对空指针的解引用操作 3.2 对动态开辟的空间进行越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态内存开辟的一部分 3.5 对同一块空间的多次释放 3.6 动态内存开辟之后忘记释放 总结 前…

杨氏矩阵(C语言)

文章目录 问题技术名词解释思路关键代码运行代码 问题 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。 要求:时间复杂度小于O(N); 技术名词解释 杨氏矩阵&…

自动化测试框架Robot Framework入门

什么是RF RF是一个基于 Python 的、可扩展的关键字驱动的自动化 验收测试框架、验收测试驱动开发 (ATDD)、 行为驱动开发 (BDD) 和机器人流程自动化 (RPA)。它 可用于分布式、异构环境,其中自动…

Spring Security——04,认证_校验

认证_校验 一、认证过滤器二、配置过滤器三、测试过滤器3.1 登录接口3.2 非登录接口3.3 结果 一键三连有没有捏~~ 一、认证过滤器 创建一个filter包,创建一个过滤器 代码如下: Component public class JwtAuthenticationTokenFilter extends OncePerR…

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改 这一次G老师不好使了 在集群中使用deepspeed默认的端口号29500被占用,显示更改居然不起作用 G老师给的方法也不好使 #!/bin/bash MASTER_ADDRlocalhost MASTER_PORT29501 # 选择一个未被占用的端…

mysql 运算符 语句 字符集 校队集

mysql 运算符 使用select语句可以输出运算的结果 mysql标识符不区分大小写 算数运算符 1./除法 得到的结果是一个小数 %是整数,省略小数 2、除以0不会报错,得到的结果是 null 3.数宇和字符串做加法运算,并不会拼接 比较运算符 1.mysql里面的=是比较运算符,而不是赋值运算…

lora pingpang系统 4

1 深入了解LoRa技术原理 1.1 LoRa扩频通信原理 1.1.1 模拟无线通信: 模拟无线通信是一种使用模拟信号传输数据的通信方式。这种通信方式已经被数字无线通信所取代,因为数字通信具有更高的效率和可靠性。 天线:从空中接收到的无线电波转换成…

数据结构——图的概念,图的存储结构,图的遍历(dfs,bfs)

目录 1.图的定义和术语 2.案例引入 1.六度空间理论 3.图的类型定义 4.图的存储结构 1.邻接矩阵 1.无向图的邻接矩阵表示法 2.有向图的邻接矩阵表示法 3.网(有权图)的邻接矩阵表示法 代码示例: 2.采用邻接矩阵表示法创建无向图…

MySQL 表的增删改查

文章目录 一、什么是CRUD?二、新增(Create)1、单行数据 全列插入2、多行数据 指定列插入3、插入特殊类型 三、查询(Retrieve)1、全列查询2、指定列查询3、表达式查询4、指定别名5、去重6、排序7、条件查询基本查询&a…

java算法day44 | ● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

完全背包理论基础 完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。 体现在代码中就是对背包的遍历顺序不同。01背包是逆序遍历背包,完全背包是顺序遍历背包。 518. 零钱兑换 II class Solution {public int change(int amount, int[] coin…

IMAP的要点:旅行前需要了解的内容

你是否经常因会议而出差,需要在各种设备上灵活地访问你的电子邮件?如果是的话,你可能会想了解你的电子邮件系统是如何通过使用互联网消息访问协议(IMAP)来工作的,这样当你不在办公桌前时,你可以…

Java基础 - 代码练习

第一题&#xff1a;集合的运用&#xff08;幸存者&#xff09; public class demo1 {public static void main(String[] args) {ArrayList<Integer> array new ArrayList<>(); //一百个囚犯存放在array集合中Random r new Random();for (int i 0; i < 100; …

SpringCloud - 如何本地调试不会注册到线上环境(Nacos)?

问题描述 有时候我们需要本地调试注册到 Nacos 上&#xff0c;但是会影响线上服务的 Feign 请求打到本地导致不通影响了线上业务。 原因分析 一般最传统的解决方案就是修改本地 bootstrap.yml 的 spring.cloud.nacos.discovery.namespace spring:application:name: app-serv…

jvisualvm 使用教程

之前看过 jvisualvm&#xff0c;但是那个时候对 JVM 并不是很熟悉&#xff0c;后面看了下八股文&#xff0c;看了下 JVM 的相关知识之后&#xff0c;发现多了解点 JVM 的东西&#xff0c;对我们 CRUD 其实是有指导意义的&#xff0c;就比如我们通常会 new 一堆的没有用到的对象…

使用 Spring Email 和 Thymeleaf 技术,向新注册用户发送激活邮件(二)

本篇博客对应“2.2 开发注册功能”小结 对应视频: 开发注册功能 开发注册功能-续 注册功能是相对比较复制的功能&#xff0c;对于一个相对复杂的功能&#xff0c;可以把这个功能进行拆解。把这个功能的流程想清楚&#xff0c;就知道怎么拆解了&#xff1a; 也可以按照请求进行…

[每周一更]-第92期:Go项目中的限流算法

这周五在清明假期内&#xff0c;提前更新文章 很多业务会有限流的场景&#xff0c;比如活动秒杀、社区搜索查询、社区留言功能&#xff1b;保护自身系统和下游系统不被巨型流量冲垮等。 在计算机网络中&#xff0c;限流就是控制网络接口发送或接收请求的速率&#xff0c;它可防…

【算法练习】28:选择排序学习笔记

一、选择排序的算法思想 弄懂选择排序算法&#xff0c;先得知道两个概念&#xff1a;未排序序列&#xff0c;已排序序列。 原理&#xff1a;以升序为例&#xff0c;选择排序算法的思想是&#xff0c;先将整个序列当做未排序的序列&#xff0c;以序列的第一个元素开始。然后从左…