Пример #1
0
    def calc_splits_sub(self, rs: ReportingSet, filter_string: str, variables_calculation):
        """calculation of dataset crossed with a codeplan, similar to a crosstable.

        :param rs:
        :param filter_string:
        :param variables_calculation:
        :return:
        """
        for result_split in self.result_subsplits:
            if isinstance(result_split, str):  # TODO check if functional
                """Einfache Kreuztabelle mit Nennung von Kreuzvariable als string. Codes werden aus Bestehendem abgeleitet."""
                filter_string = " WHERE " + filter_string if filter_string else ""
                result_split_new = CodePlan()
                result_split_new.data = self.db.query_list("SELECT " + result_split + " FROM " + self.database_table + filter + " GROUP BY " + result_split, echo=False)
                result_split_new.variables = [result_split, ]
                result_split = result_split_new
            elif isinstance(result_split, CodePlan) and len(result_split) > 0:
                for code in result_split:
                    filter_string_split = " ({})".format(' OR '.join(["{}='{}' ".format(var, code) for var in result_split.variables]))
                    if filter_string:
                        filter_string_split += " and ({}) ".format(filter_string)
                    rs['{}_{}'.format(result_split.variables[0], code)] = self._calc_frequencies(variables_calculation, filter_string_split)
                    rs.splits_sub[result_split.variables[0]] = copy.copy(result_split)