PowerBI使用Tabular Editor翻译报表模型<二>

本文介绍了如何使用Tabular Editor和Power BI Helper导出及管理PowerBI报表模型的翻译,强调了代码方式维护翻译的便利性,并提供了操作步骤,帮助提升模型的后期维护效率。

图片

5

每个人犯了错,都自称是经验

在上一篇文PowerBI使用Tabular Editor翻译报表模型有介绍怎么使用Tabular Editor来翻译报表模型文件,在文章最后说随着模型越来越复杂,表和度量越来越多,以及为了方便后期维护,需要使用文件来维护模型翻译的配置信息。

这就需要将表模型结构和度量值都导出来,这在先前的文件中已有介绍,可以回顾用报表说明PowerBI报表

### 控制台表格输入的实现方法 为了在控制台上实现类似于“填表”的功能,可以利用C++的标准库来处理用户的逐行输入并将其存储在一个维数据结构中。这里推荐使用 `std::vector<std::string>` 来保存每一行的数据条目。以下是具体实现方式: #### 表格输入的核心逻辑 通过循环不断请求用户输入每列的内容,并将这些内容按照行的形式存入容器之中。当完成所有必要字段的信息采集后,则停止收集流程并将结果打印出来或者继续其他业务逻辑操作。 ```cpp #include <iostream> #include <vector> #include <string> using namespace std; // Function to display table header dynamically based on column names provided by user or predefined ones. void showTableHeader(const vector<string>& headers) { cout << "+-----------------------------+\n"; // Fixed width for simplicity cout << "| "; for (const auto& hdr : headers) { cout << setw(15) << left << hdr.substr(0, 15) << " | "; // Limit each field length to 15 chars } cout << "\n+-----------------------------+\n"; } // Collecting data row-by-row from console until sentinel value entered ('done'). vector<vector<string>> collectDataRows(int numCols) { vector<vector<string>> rows; string cellValue; int rowIndex = 0; while (true) { vector<string> currentRow(numCols); cout << "Enter values for Row #" << ++rowIndex << ": \n"; for (int col = 0; col < numCols; ++col) { cout << "Column [" << col + 1 << "] Value: "; getline(cin >> ws, cellValue); // Use getline with manipulator to handle spaces correctly if ("done" == cellValue && !rows.empty()) { return rows; // If 'done', exit collection only after at least one valid entry exists. } currentRow[col] = move(cellValue); if (!cellValue.empty() && all_of(cellValue.begin(), cellValue.end(), ::isspace)) { throw invalid_argument("Empty cells not allowed."); } } rows.emplace_back(move(currentRow)); } } // Display collected data in tabular format similar to how it was inputted earlier. void printDataTable(const vector<string>& headers, const vector<vector<string>>& body) { showTableHeader(headers); for (const auto& rowData : body) { cout << "| "; for (size_t i = 0; i < rowData.size(); ++i) { cout << setw(15) << left << rowData[i].substr(0, 15) << " | "; } cout << endl; } cout << "+-----------------------------+" << endl; } int main() try { const int NUM_COLUMNS = 3; // Example number of columns cout << "Welcome! Let's create a simple table.\nSpecify three-column entries below:\n"; vector<string> columnNames {"Name", "Age", "Occupation"}; showTableHeader(columnNames); auto dataTable = collectDataRows(NUM_COLUMNS); printDataTable(columnNames, dataTable); } catch (exception& e) { cerr << "Error occurred during execution: " << e.what() << ". Exiting..." << endl; return EXIT_FAILURE; } ``` 此代码片段展示了如何构建一个基本但灵活的命令行界面用于录入多行列信息[^3]。它首先定义了一些辅助函数用来展示头部和实际记录部分;接着提供了核心算法让用户能够反复提交新的项目直至他们决定终止会话为止。最后还加入了异常处理器以便更好地应对潜在错误状况的发生。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值